160 votes

Puis-je conserver le dossier .git dehors les fichiers que je veux sur chenilles ?

J’ai une idée inhabituelle d’utiliser git comme un système de sauvegarde. Alors disons que j’ai un répertoire ./backup/myfiles et je veux que sauvegarder à l’aide de git. Pour garder les choses propre je ne veux pas d’avoir un répertoire .git dans le dossier myfiles, alors j’ai pensé que je pouvais créer ./backup/git_repos/myfiles. En regardant les docs de git, j’ai essayé de faire ceci :

Vous pouvez voir le message d’erreur que m’y rendre. Ce que je fais mal ?

187voto

niks Points 850

Vous avez juste besoin de s'assurer que le référentiel sait où le travail est un arbre, et vice-versa.

Pour laisser le référentiel de savoir où le travail est un arbre, définissez la valeur de configuration core.worktree. Pour laisser le travail de l'arborescence de savoir d'où ça répertoire git est, ajouter un fichier nommé .git (et non un dossier!) et ajouter une ligne comme

gitdir: /path/to/repo.git

Vous pouvez initialiser une nouvelle "externe" référentiel avec

git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git

Votre répertoire en cours est l'arbre de travail et git utilisera le dépôt /path/to/repo.git. La commande init sera automatiquement réglée à l' core.worktree de la valeur spécifié à l' --git-dir paramètre.

Vous pouvez même ajouter un alias pour ce:

[alias]
    initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"

108voto

Bombe Points 34185
git --git-dir=../repo --work-tree=. add foo

Cela va faire ce que vous voulez mais évidemment sucer quand vous devez le spécifier à chaque commande git-vous jamais utiliser.

[Edit] Vous pouvez exporter GIT_WORK_TREE=. et GIT_DIR=../backup et Git va ramasser sur chaque commande. Cela ne sera confortablement vous permettre de travailler dans un référentiel unique par shell. [/Edit]

Je préfère suggérer de créer des liens symboliques vers les .répertoire git à un autre endroit, ou la création d'un lien symbolique à la .git répertoire de votre répertoire de sauvegarde.

66voto

Fryer Points 51

Le option pour (et ) peut être utilisé pour ce faire sur ma version de git ( ). L’option sépare le dépôt git de l’arbre de travail et crée un lien symbolique de git agnostique de système de fichiers (sous la forme d’un fichier nommé `` ) à la racine de l’arbre de travail. Je pense que le résultat est identique à la réponse des niks.

20voto

Charles Bailey Points 244082

C'est classique pour un nom de répertoire qui est un dépôt git qui a son arbre de travail dans un lieu insolite avec un '.git' extension, un peu comme un dépôt nu.

mkdir ../git_repos/myfiles.git

Si vous avait fourni l' --work-tree option au moment de l'initialisation puis cela aurait configurer automatiquement l' core.worktree variable de config qui signifie que git va savoir où se trouve l'arbre de travail une fois que vous spécifiez le répertoire git.

git --git-dir=../git_repos/myfiles.git --work-tree=. init

Mais vous pouvez définir cette variable après le fait.

git --git-dir=../git_repos/myfiles.git config core.worktree "$(pwd)"

Une fois que vous avez fait cela, la commande add devrait fonctionner comme prévu.

git --git-dir=../git_repos/myfiles.git add foo

8voto

To1ne Points 356

Utilisation `` dans le repo :

Par la suite, vous pouvez utiliser dans le répertoire, sans définir les variables d’environnement ou des paramètres supplémentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X