web-dev-qa-db-fra.com

git: Comment ajoutez-vous un répertoire externe au référentiel?

Je souhaite ajouter un répertoire externe à un référentiel existant.

Répertoire externe: /Home/some/directory

Répertoire de travail: /Htdocs/.git

Si je tente la commande suivante à partir du répertoire/htdocs:

git add/home/some/directory

Je reçois une erreur: Fatal: '/ home/some/directory' est en dehors du référentiel 

41
Sly

Si j'ai besoin de faire quelque chose comme ça, je déplacerai normalement ce fichier ou répertoire externe dans mon dépôt git et mon lien symbolique vers l'emplacement d'origine.

mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory

J'utilise cette technique lorsque je développe un plug-in pour une application que je souhaite conserver sous contrôle de version mais que je dois stocker dans un emplacement spécifique.

48
csexton

J'ai eu la même erreur ... googlé à mort ... pas beaucoup est sorti.

La réponse de Christian a fonctionné: 

git --work-tree=/ add /home/some/directory

Mais ensuite "work-tree" m'a permis de continuer. Je me suis emparé de tous les documents Git et suis venu avec core.worktree.

J'ai utilisé

git config --global core.worktree /

Et le tour est joué! Je peux maintenant ajouter de any directory dans le système ... Je ne sais pas si cela posera problème à d’autres endroits, mais je vais essayer de le mettre à jour au fur et à mesure.

15
MotherDawg
git --work-tree=/ add /home/some/directory
13
anon

Il existe une solution très simple à cela. 

Supposons que votre référentiel Git se trouve dans/var/data/my-app et que vous souhaitez ajouter/var/data/public/à ce référentiel. Vous ne pouvez pas utiliser 'add' car Git n'ajoutera pas de ressources en dehors du répertoire racine du référentiel. Alors.. 

Solution:

  1. Déplacez le répertoire/var/data/public/dans votre racine Git-repo (/ var/data/my-app).

  2. Créez un lien symbolique (lien symbolique) dans le dossier/var/data/public vers le dossier/var/data/my-app/public, à l’aide de: ln -s source_file_or_directory virtual_file_or_directory

Ensuite, ajoutez simplement le fichier ou le répertoire déplacé à Git en utilisant git add de la manière habituelle. Votre contrôle de source Git suit maintenant le fichier/dossier souhaité, et votre lien symbolique dans le répertoire externe garantit que le fichier/dossier est accessible à tout le monde!

8
Stormbytes

Si le code que vous souhaitez ajouter à votre référentiel n'est pas trop volumineux, vous pouvez également le copier automatiquement sur votre référentiel à chaque fois avant de procéder au Push.

Dans mon cas, j’ai par exemple besoin d’un fichier R, que je modifie assez souvent, dans plusieurs dépôts et j’ai écrit un petit script Shell:

#!/usr/bin/env bash

cp -r /some/directory/file.R .
git add .
git commit -m "add"
git Push

... et j'exécute ce script pour appliquer toutes les modifications, y compris celles de/some/directory.

1

Cela m'a fait réfléchir, car j'aimerais beaucoup la solution consistant à utiliser un fichier/répertoire en lien symbolique, mais que je suis bloqué sur un ordinateur Windows. Autant que je sache, les liens symboliques dans Windows ne fonctionnent pas vraiment de la même manière. Une autre solution pourrait donc consister à écrire deux scripts/fonctions bash pour "importer" et "exporter" le ou les fichiers en question, tels que:

import() {
    cp -fr /home/some/directory /htdocs/
}

export() {
    cp -fr /htdocs/directory /home/some/
}

Ensuite, vous auriez une copie du fichier dans votre référentiel, que vous pourriez git add.

0
Tubbles

Vous pouvez également utiliser le sous-module si vous souhaitez utiliser plusieurs référentiels git (ln ne fonctionne pas de cette manière). Essayez 'man git-submodule'.

0
superarts.org