Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/09/2010, à 16:26

fove2

Quel type de lien choisir ?

Bonjour,

dans mon travail, j'ai trois dossiers pour un même projet (projet1, projet2 et projet3), en fait, chacun des trois dossiers est prévu pour l'une des trois évolutions possible de mon travail, d'ici peut j'aurais à n'en garder qu'un seul des dossier "projet?" (le point d'interrogation représente un nombre) en supprimant les deux autres.

Oui mais ces dossiers ont en commun un même sous-dossier (le sous dossier "statique") qui contient rigoureusement la même chose.


j'ai donc l'arborescence suivante :

.
├── projet1
│   └── statique
├── projet2
│   └── statique
└── projet3
    └── statique

En fait, j'aimerais que lorsque je modifie quelque chose dans un des sous-dossier "statique" d'un des dossiers "projet?", eh bien que ce changement se répercute dans tous les autres ~/projet?/statique.
C'est pourquoi, j'en viens à avoir besoin d'un lien unissant tous les dossiers "statique" des différents dossiers projet?.
Le problème est que si je crée un dossier statique dans, par exemple, projet1 puis que je crée un liens vers ~/projet1/statique dans projet2 et projet3, le contenue de tous les "statique"s sera perdu avec la suppression de ~/projet1/statique puisque comme je l'ai dis plus haut il se peut que, selon l'avancement de mes travaux je n'ai plus besoin de tous le contenu de ~/projet1.

Il me faut donc un moyen de lier le contenu de trois dossier mais que ce contenu là ne soit pas perdu avec la suppression d'une occurrence particulière de  ce lien.


En espérant m'être bien fait comprendre, je vous souhaite une bonne journée.

À très bientôt,


Cordialement,

Hors ligne

#2 Le 26/09/2010, à 16:32

wido

Re : Quel type de lien choisir ?

Bonjour,
c'est la facilité:

.
├── projet1
│   └── statique (lien symbolique vers backup)
├── projet2
│   └── statique (lien symbolique vers backup)
└── projet3
    └── statique (lien symbolique vers backup)
______Backup

Peut-être avec les solutions comme git, subversion,...?

Hors ligne

#3 Le 26/09/2010, à 17:59

fove2

Re : Quel type de lien choisir ?

@wido j'avoue ne pas avoir penser à backup mais quand je saurais quel projet? choisir et que je supprimerais les deux autres, j'aurais à recopier le backup en place du statique, n'y a-t-il pas de solution pour laquelle il suffirais de seulement supprimer les deux projet? inutiles ?

Hors ligne

#4 Le 26/09/2010, à 19:48

fove2

Re : Quel type de lien choisir ?

d'autant qu'il y'a plusieurs "statiques" et tout recopier sera un peut bourin hmm

Hors ligne

#5 Le 27/09/2010, à 10:25

chopinhauer

Re : Quel type de lien choisir ?

Dans ce cas tu vas utiliser 'cp -L' pour obtenir une belle copie fraîche de ton projet sans lien symboliques.

PS: Ceci dit git n'est pas beaucoup plus compliqué à utiliser.

Dernière modification par chopinhauer (Le 27/09/2010, à 10:39)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#6 Le 27/09/2010, à 10:36

Totor

Re : Quel type de lien choisir ?

Bonjour,

Une solution :
Créer une arborescence "projet0" avec le sous dossier statique
Tous les autres dossiers "statique" sont des liens symboliques vers le dossier "Projet0/statique"

.
├── projet0
│   └── statique
├── projet1
│   └── statique -> ../../projet0/statique
├── projet2
│   └── statique -> ../../projet0/statique
└── projet3
    └── statique -> ../../projet0/statique

edit : je n'avais pas vu la réponse de wido.

Dernière modification par Totor (Le 27/09/2010, à 10:39)


-- Lucid Lynx --

Hors ligne

#7 Le 28/09/2010, à 18:16

sputnick

Re : Quel type de lien choisir ?

git branch wink


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 28/09/2010, à 19:29

fove2

Re : Quel type de lien choisir ?

quezaco

Hors ligne

#9 Le 28/09/2010, à 20:17

wido

Re : Quel type de lien choisir ?

c'est du git

Hors ligne

#10 Le 28/09/2010, à 20:22

fove2

Re : Quel type de lien choisir ?

euh quand je parlais de projet, je ne parlais pas de projet de programmation juste un projet de travail hmm

Hors ligne

#11 Le 28/09/2010, à 20:31

sputnick

Re : Quel type de lien choisir ?

Gestion des branches

Git permet une gestion efficace des branches, et des merges (fusion de branches). Les branches permettent d'avoir simultanément plusieurs versions de votre programme dans votre dépôt Git. C'est très utile, par exemple pour développer une nouvelle fonctionnalité, tout en gardant la branche principale intacte. Ainsi, vous pouvez toujours faire des changements dans la branche principale (corrections de bugs par exemple), tout en développant en parallèle une nouvelle fonctionnalité.

CF -> http://doc.ubuntu-fr.org/git

Perso, j'utilise git pour plein de choses pas forcement de développement, notamment mon /etc ou mes documents openoffice.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 28/09/2010, à 20:33

wido

Re : Quel type de lien choisir ?

Quand on utilise du git, ne veut pas dire obligatoirement d'utiliser pour de la programmation, dans le magazine glmf explique une autre façon d'utiliser git ou subversion, Je fait ma petite recherche quant à savoir le numéro du magazine.

EDIT: ça doit etre celui là:
http://www.unixgarden.com/index.php/new … e-journaux

Dernière modification par wido (Le 28/09/2010, à 20:39)

Hors ligne

#13 Le 28/09/2010, à 20:51

sputnick

Re : Quel type de lien choisir ?

Voici un test dans tes conditions précises illustrant point par point l'utilisation de git branch :

on a un répertoire normal où on crée un fichier statique conformément à la donne :

sputnick@FreAkyLab:/tmp/foo$ ls
sputnick@FreAkyLab:/tmp/foo$ cat>statique
this is a text

On crèe le dépot git

sputnick@FreAkyLab:/tmp/foo$ git init
Initialized empty Git repository in /tmp/foo/.git/

On ajoute les fichiers à gérer ( en fait tout ici, c'est récursif )

sputnick@FreAkyLab:/tmp/foo$ git add .

On commit, CAD qu'on valide les modifications :

sputnick@FreAkyLab:/tmp/foo$ git commit -a -m test
[master (root-commit) 3296a1a] test
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 statique

On crèe autant de branches que l'on veut, qui auront le contenu statique requis puis on liste les branches :

sputnick@FreAkyLab:/tmp/foo$ git branch test1
sputnick@FreAkyLab:/tmp/foo$ git branch test2
sputnick@FreAkyLab:/tmp/foo$ git branch test3
sputnick@FreAkyLab:/tmp/foo$ git branch test4
sputnick@FreAkyLab:/tmp/foo$ git branch
* master
  test
  test2
  test3
  test4

On utilise une branche particulière avec checkout :

sputnick@FreAkyLab:/tmp/foo$ git checkout test3
Switched to branch 'test3'

On liste le dossier courant et on crèe le fichier file :

sputnick@FreAkyLab:/tmp/foo$ ls
statique
sputnick@FreAkyLab:/tmp/foo$ cat>file
aaa

On ajoute file à la branche en cours d'utilisation et on commit :

sputnick@FreAkyLab:/tmp/foo$ git add file
sputnick@FreAkyLab:/tmp/foo$ git commit -a -m commit_test
[test3 5fbee0d] commit_test
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file

On liste le dossier courant puis on revient à la branche d'origine master et on reliste :

sputnick@FreAkyLab:/tmp/foo$ ls
file  statique
sputnick@FreAkyLab:/tmp/foo$ git checkout master
Switched to branch 'master'
sputnick@FreAkyLab:/tmp/foo$ ls
statique

On passe à la branche test4 :

sputnick@FreAkyLab:/tmp/foo$ git checkout test4
Switched to branch 'test4'

Divers :

sputnick@FreAkyLab:/tmp/foo$ ls
statique
sputnick@FreAkyLab:/tmp/foo$ cat>fichier_quelquonque
azerty
sputnick@FreAkyLab:/tmp/foo$ git add .
sputnick@FreAkyLab:/tmp/foo$ git commit -a -m foo
[test4 23bb17a] foo
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 fichier_quelquonque
sputnick@FreAkyLab:/tmp/foo$ git checkout master
Switched to branch 'master'
sputnick@FreAkyLab:/tmp/foo$ ls
statique
sputnick@FreAkyLab:/tmp/foo$ git status
# On branch master
nothing to commit (working directory clean)
sputnick@FreAkyLab:/tmp/foo$

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#14 Le 29/09/2010, à 22:23

nesthib

Re : Quel type de lien choisir ?

sinon tu peux aussi utiliser des liens en dur au lieu d'un lien symbolique, c'est-à-dire que plusieurs noms de fichier correspondent au même inode.

touch fichier1
ln fichier1 fichier2
ln fichier1 fichier3

maintenant modifie l'un des fichiers et les autres le sont aussi, si tu en supprimes n-1, le fichier reste accessible par le dernier pointeur


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 29/09/2010, à 23:24

fove2

Re : Quel type de lien choisir ?

@nesthib: ce que tu décrit est exactement ce que je cherche à faire : plusieurs fichiers pointant vers le même inode. mais comment ? avec ln justement ?

Hors ligne

#16 Le 30/09/2010, à 08:46

nesthib

Re : Quel type de lien choisir ?

oui tout simplement.
Si tu voulais faire un lien symbolique (raccourci ou symlink) il faudrait faire ln -s dans ce cas les liens seraient cassés dès que l'on supprime le fichier principal (le fichier pointe vers un autre fichier).
Avec un lien dur (hardlink) tous les pointeurs sont équivalents et associés au même emplacement sur le disque (ça ne fonctionne qu'au sein d'une même partition, contrairement au lien symbolique).

lorsque tu fais ls -l sur un fichier tu vois le nombre de pointeurs vers l'emplacement disque de ce fichier (2ème colonne).
avec ls -i tu vois vers quel numéro d'inode pointe ton fichier, avec un lien en dur il sera identique pour les différents pointeurs.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#17 Le 30/09/2010, à 10:13

fove2

Re : Quel type de lien choisir ?

Le problème est que j'ai essayer de créer un lien dure d'un dossier mais ln me dis qu'il ne veut pas faire de lien dure pour les répertoires (il ne sait en faire que pour les fichier) :

fove48@OperateurNoir:~/Bordel/test$ ln test1/ test2
ln: «test1/»: lien direct non permis pour un répertoire

dans le man de ln, dans le "voir aussi", plus précisément, il n'y a pas de commande dont le manuel m'ai dit qu'elle puisse faire ce que je demande. Une idée ?

Hors ligne

#18 Le 30/09/2010, à 12:04

chopinhauer

Re : Quel type de lien choisir ?

Un dossier ne peut pas faire de lien dur d'un dossier (ou mieux les uniques liens durs qui existent sont les liens '..' dans les sous-répertoires). Par contre tu peux t'en sortir avec un script du genre:

#!/bin/bash
shopt -s dotglob

lndir() {
	local orig=$1
	local dest=$2
	if [ ! -d "$orig" -o -e "$dest" -a ! -d "$dest" ]; then
		echo "Error: $orig is not a directory" >&2
		exit 1
	fi
	[ -e "$dest" ] || mkdir "$dest"
	for i in "$orig/"*; do
		if [ -d "$i" ]; then
			lndir "$i" "$dest/${i#$orig/}"
		elif [ -f "$i" ]; then
			ln "$i" "$dest/${i#$orig/}"
		fi
	done
}

lndir "$@"

Usage: script.sh rep_origine rep_destination


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#19 Le 30/09/2010, à 12:21

fove2

Re : Quel type de lien choisir ?

hmm, j'essaye d'étudier le script mais je ne comprends pas bien tout. m'enfin, je fais confiance, cela dit comment vas s'utilisé le script ? je devrais l'actionné à chaque fois que j'ajoute à document au dossier pour mettre a jour les changements ?

Hors ligne

#20 Le 30/09/2010, à 12:23

nesthib

Re : Quel type de lien choisir ?

Effectivement on ne peut pas créer de lien dur pour les dossiers (enfin on peut mais il ne vaut mieux pas), ceci pour la bonne raison que cela pourrait entraîner l'apparition d'arborescences infinies (un dossier se contenant lui même). Il te faut créer des répertoires classiques et c'est seulement les fichiers contenus qui pourront être liés.

pour le script il y a beaucoup plus simple que celui au dessus:

DOSSIER_SOURCE='./chemin/relatif/vers/la/source'
DOSSIER_CIBLE='/chemin/absolu/vers/le/dossier/dans/lequel/créer/la/cible'
find $DOSSIER_SOURCE -type d -exec mkdir -p $DOSSIER_CIBLE/{} \;
find $DOSSIER_SOURCE -type f -exec ln $DOSSIER_CIBLE/{} \;

pour DOSSIER_SOURCE, le mieux est de se placer dans le dossier que l'on veur répliquer et de définir './'


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#21 Le 30/09/2010, à 12:26

chopinhauer

Re : Quel type de lien choisir ?

Il marche comme ln: il fait un lien entre le premier répertoire et le deuxième. Les fichiers seront des liens durs, les répertoires seront différents.

PS: À y réfléchir mieux, la version suivante est mieux: elle marche comme remplaçant complet de ln sauf les options:

#!/bin/bash
shopt -s dotglob
shopt -s nullglob

lndir() {
	local orig=$1
	local dest=$2
	if [ -f "$orig" ]; then
		ln "$orig" "$dest"
	elif [ -d "$orig" ]; then
		if [ -e "$dest" -a ! -d "$dest" ]; then
			echo Error: Cannot link $orig to $dest, $dest is not a directory. >&2
			return 1
		fi
		mkdir -p "$dest"
		for i in "$orig/"*; do
			lndir "$i" "$dest/${i#$orig/}"
		done
	else
		echo Error: Cannot link $orig to $dest, $orig is neither a directory or a regular file. >&2
	fi
	return 0
}

lndir "$@"

Dernière modification par chopinhauer (Le 30/09/2010, à 12:54)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#22 Le 30/09/2010, à 12:52

chopinhauer

Re : Quel type de lien choisir ?

nesthib a écrit :
DOSSIER_SOURCE='./chemin/relatif/vers/la/source'
DOSSIER_CIBLE='/chemin/absolu/vers/le/dossier/dans/lequel/créer/la/cible'
find $DOSSIER_SOURCE -type d -exec mkdir -p $DOSSIER_CIBLE/{} \;
find $DOSSIER_SOURCE -type f -exec ln $DOSSIER_CIBLE/{} \;

Merci, du coup cela fait plus court. Il faut aussi dire que beaucoup de lignes de mon script sont du contrôle d'erreurs.

orig=$1
dest=$(cd "$2"; pwd)
cd $orig
find . -type d -exec mkdir -p $dest/{} \;
find . -type f -exec ln {} $dest/{} \;

Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne