J'ai un projet avec git, et je veux juste cloner ou extraire un répertoire spécifique, comme myproject / javascript, tout comme le fait subversion.
faire quelques changements, valider et repousser.
C'est possible?
J'ai un projet avec git, et je veux juste cloner ou extraire un répertoire spécifique, comme myproject / javascript, tout comme le fait subversion.
faire quelques changements, valider et repousser.
C'est possible?
Réponses:
git fetch
git checkout HEAD path/to/your/dir/or/file
Où " path/...
" dans (3) commence au répertoire juste en dessous de la racine du dépôt contenant votre " .../file
"
Notez qu'au lieu de "HEAD", le code de hachage d'une validation spécifique peut être utilisé, et vous obtiendrez alors la révision (fichier) ou les révisions (dir) spécifiques à cette validation.
--
n'est cependant pas obligatoire. Il force les bits après cela à être interprétés comme un chemin. Donc, oui, si vous avez un fichier avec le nom --help
que vous souhaitez récupérer, le préfixe avec ces tirets serait nécessaire:git checkout HEAD -- --help
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
fetch
ni de checkout
commandes, nous pouvons simplement faire la demande d'extraction après la remote add
commande pour obtenir toute la branche master.
Après avoir beaucoup cherché une réponse, ne pas trouver, abandonner, réessayer et ainsi de suite, j'ai finalement trouvé une solution à cela dans un autre fil SO:
Comment git-pull tous sauf un dossier
Pour copier-coller ce qu'il y a:
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 OP veut (travailler sur un seul répertoire), ajoutez simplement ce répertoire à .git/info/sparse-checkout
, lorsque vous effectuez les étapes ci-dessus.
Un grand merci à @cforbish!
master
. Assurez-vous simplement git branch --set-upstream-to=origin/<branch>
de tirer correctement
Ce n'est pas possible. Vous devez extraire 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à"
Si vous souhaitez obtenir les dernières modifications d'un répertoire sans le saisir, vous pouvez faire:
$ git -C <Path to directory> pull
git clone --filter
à partir de Git 2.19
Cette option ignorera en fait la récupération des objets inutiles sur le serveur.
J'ai écrit une réponse détaillée expliquant l'état actuel du support sur: Comment cloner un sous-répertoire uniquement d'un référentiel Git?
Il est très probable que tout ce qui sera mis git clone
en œuvre dans ce domaine aura également des git pull
analogues.
Essayé et testé cela fonctionne!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
J'espère que cela a été utile!
Parfois, vous voulez simplement jeter un coup d'œil aux copies précédentes de 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 et d'extraire le commit spécifique qui vous intéresse et de jeter un œil au sous-répertoire de ce référentiel cloné. Parce que tout est local, vous pouvez simplement supprimer ce clone lorsque vous avez terminé.
Pour tout ce qui a du mal avec les chemins de fichiers théoriques et les exemples comme je l'ai fait, voici un exemple du monde réel: Microsoft propose ses documents et exemples sur git hub, malheureusement, ils rassemblent tous leurs fichiers d'exemple pour un grand nombre de sujets dans ce référentiel:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Je n'étais intéressé que par les fichiers Microsoft Dynamics js dans le chemin
msdn-code-gallery-community-s-z/Sdk.Soap.js/
alors j'ai fait ce qui suit
créer un
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
fichier dans mon dossier référentiels sur le disque
git sparse-checkout init
dans ce répertoire en utilisant cmd sous windows
Le contenu du fichier de
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
est
Sdk.Soap.js/*
enfin faire un
git pull origin master