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?
git fetch
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.
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
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!
Ce n'est pas possible. Vous devez tirer tout le référentiel ou rien.
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à"
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
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
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é.