web-dev-qa-db-fra.com

Comment extraire un répertoire spécifique avec git

J'ai un projet avec git et je veux seulement cloner ou extraire un répertoire spécifique, comme mon projet/javascript, tout comme Subversion.
apporte quelques modifications, commit et Push back again.
C'est possible?

164
bluefoot
  1. cd dans le haut de votre copie repo
  2. git fetch
  3. git checkout HEAD path/to/your/dir/or/file

    • Où "path/..." dans (3) commence au répertoire situé juste en dessous de la racine du référentiel contenant votre ".../file"

    • NOTEZ qu'au lieu de "HEAD", le code de hachage d'une validation spécifique peut être utilisé. Vous obtiendrez alors la révision (fichier) ou les révisions (dir) spécifiques à cette validation.

189
vergueishon

Dans un répertoire vide:

git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
84
scottalan

Après avoir longuement cherché une réponse, sans trouver, abandonner, réessayer et ainsi de suite, j'ai finalement trouvé une solution à cela dans un autre thread SO:

Comment git-tirer tous les dossiers sauf un

Pour copier-coller ce qui est là:

git init
git remote add -f Origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull Origin master

Pour faire ce que veut OP (travailler sur un seul répertoire), ajoutez simplement ce répertoire à .git/info/sparse-checkout, en effectuant les étapes ci-dessus.

Merci beaucoup à @cforbish!

26
msb

Ce n'est pas possible. Vous devez tirer tout le référentiel ou rien.

13
shingara

Peut-être que cette commande peut être utile:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit  path/to/your/dir/or/file > files.tar

"Et voilà"

9
fabrice belle

Je vois. Je vais essayer de créer des sous-modules et voir si cela fonctionne pour moi. Je vais rapporter les résultats. EDIT: la caisse clairsemée et les sous-modules travaillés pour moi. Les liens que j'ai lus auparavant (fournis par VonC et Michel Jansen) sont les suivants:

Comment git-tirer tous les dossiers sauf un

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

http://vmiklos.hu/blog/sparse-checkout-example-in-git-1-7

http://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout

mise à jour du sous-module git

4
bluefoot

git clone --filter depuis Git 2.19

En fait, cette option évite d'extraire des objets inutiles du serveur.

J'ai écrit une réponse détaillée expliquant l'état actuel du support à l'adresse suivante: Comment cloner un sous-répertoire uniquement d'un référentiel Git?

Il est très probable que tout ce qui sera implémenté pour git clone dans cette zone aura également des analogues git pull.

Si vous voulez obtenir les dernières modifications dans un répertoire sans y entrer, vous pouvez faire:

$ git -C <Path to directory> pull
0
feralamillo

Parfois, vous souhaitez simplement consulter les versions précédentes des fichiers sans avoir à passer par les diffs.

Dans un tel cas, il est tout aussi facile de créer un clone d'un référentiel, de vérifier le commit spécifique qui vous intéresse et d'examiner le sous-répertoire de ce référentiel cloné. Parce que tout est local, vous pouvez simplement supprimer ce clone lorsque vous avez terminé.

0
Abizern