Ho un progetto con git e voglio solo clonare o estrarre una directory specifica, come myproject / javascript proprio come fa Subversion.
apportare alcune modifiche, eseguire il commit e inviare nuovamente.
È possibile?
Ho un progetto con git e voglio solo clonare o estrarre una directory specifica, come myproject / javascript proprio come fa Subversion.
apportare alcune modifiche, eseguire il commit e inviare nuovamente.
È possibile?
Risposte:
git fetch
git checkout HEAD path/to/your/dir/or/file
Dove " path/...
" in (3) inizia nella directory appena sotto la radice repo contenente il tuo " .../file
"
NOTA che invece di "HEAD", è possibile utilizzare il codice hash di un commit specifico e quindi otterrai la revisione (file) o le revisioni (dir) specifiche per quel commit.
--
non è richiesto però. Forza i bit dopo di esso ad essere interpretato come un percorso. Quindi, sì, se si dispone di un file con il nome --help
che si desidera verificare, sarebbe necessario prefissarlo con questi trattini:git checkout HEAD -- --help
In una directory vuota:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
o checkout
comandi, possiamo semplicemente fare la richiesta pull dopo il remote add
comando per ottenere l'intero ramo master.
Dopo aver cercato molto una risposta, non aver trovato, rinunciato, riprovando e così via, ho finalmente trovato una soluzione a questo in un altro thread SO:
Come estrarre tutte le cartelle tranne una
Per copiare e incollare cosa c'è:
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
Per fare ciò che vuole OP (lavorare solo su una dir), basta aggiungere quella dir .git/info/sparse-checkout
, quando si eseguono i passaggi precedenti.
Mille grazie a @cforbish!
master
. Assicurati solo di fare git branch --set-upstream-to=origin/<branch>
per tirare correttamente
Non è possibile. È necessario estrarre tutto il repository o niente.
Forse questo comando può essere utile:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Se si desidera ottenere le ultime modifiche in una directory senza inserirla, è possibile effettuare:
$ git -C <Path to directory> pull
git clone --filter
da Git 2.19
Questa opzione salterà effettivamente il recupero di oggetti non necessari dal server.
Ho scritto una risposta dettagliata spiegando lo stato del supporto corrente in: Come posso clonare una sottodirectory solo di un repository Git?
È molto probabile che qualsiasi cosa venga implementata git clone
in quell'area avrà anche git pull
analoghi.
Ho provato e testato questo funziona!
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>
Spero sia stato utile!
A volte, vuoi solo dare un'occhiata alle copie precedenti dei file senza il rigmarole di passare attraverso i diff.
In tal caso, è altrettanto semplice creare un clone di un repository e verificare il commit specifico che ti interessa e dare un'occhiata alla sottodirectory in quel repository clonato. Poiché tutto è locale, puoi semplicemente eliminare questo clone al termine.
Per tutte quelle difficoltà con percorsi di file teorici ed esempi come ho fatto io, ecco un esempio reale: Microsoft offre i loro documenti ed esempi su git hub, sfortunatamente raccolgono tutti i loro file di esempio per una grande quantità di argomenti in questo repository:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Mi interessava solo i file js di Microsoft Dynamics nel percorso
msdn-code-gallery-community-s-z/Sdk.Soap.js/
quindi ho fatto quanto segue
creare un
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
file nella cartella dei miei repository sul disco
git sparse-checkout init
in quella directory usando cmd su windows
Il contenuto del file di
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
è
Sdk.Soap.js/*
finalmente fare un
git pull origin master