Git clone senza directory .git


145

C'è un flag a cui passare gitquando si fa un clone, per esempio non clonare la .gitdirectory? In caso contrario, che ne dici di un flag per eliminare la .gitdirectory dopo il clone?


41
Questa domanda non è una copia di Come fare un "git export" (come "svn export") . Questa domanda chiede come clonare un repository (remoto) senza la .gitdirectory. Il presunto duplicato chiede come esportare un repository esistente in cui si dispone già della .gitdirectory.
mknaf,

3
Essere d'accordo. Non è possibile git archiverepository remoto come dice la soluzione "possibile duplicato".
Vladislav Rastrusny il

Risposte:


215

Uso

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • L'opzione di profondità assicurerà di copiare il minimo bit di cronologia possibile per ottenere quel repository.
  • L'opzione branch è facoltativa e se non specificata otterrebbe il master.
  • La seconda riga renderà la tua directory dirformynewreponon più un repository Git.
  • Se stai eseguendo un clone di sottomodulo ricorsivo, il parametro depth e branch non si applica ai sottomoduli.

19
cosa !$/.gitsignifica?
Jürgen Paul,

15
Per chi è interessato, è una delle parole designatori , parte della funzione di espansione della storia in Bash e zsh.
Rufflewind

C'è un modo per ottenere la profondità = 1 di tutti i rami nel repository? non solo ramo principale o specificato
Gayan Pathirage

2
lo fai con l'opzione --no-single-branch, poiché --depth implica --single-branch, puoi non implicarlo con --no-single-branch. (Tratto dalla pagina man del clone git)
Robert Stoddard,

8
L'uso !$, sebbene tecnicamente corretto in questo caso, non fa nulla per aiutare le persone che non riconoscono la sintassi a capire la risposta alla domanda reale. Si basa anche sul secondo comando che segue direttamente il primo e all'interno della stessa shell. Se qualcuno omette quei requisiti impliciti, potrebbe finire per eliminare completamente qualcos'altro. Pertanto suggerisco che la tua risposta potrebbe essere migliorata specificando esplicitamente il nome dirformynewrepocome argomento del rmcomando in quanto renderà molto più chiara la connessione tra i due comandi.
davidA

29

poiché vuoi solo i file, non è necessario trattarlo come un repository git.

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .

e questo funziona solo con il percorso locale e il percorso remoto ssh / rsync, potrebbe non funzionare se il server remoto fornisce solo git: // o https: // access.


che non prenderà in considerazione .gitignore?
JJ Roman,

itub ha ragione, questo è solo copiare l'albero di lavoro. git checkout usato per farlo correttamente, ora non lo fa più.
Sylvain,

quindi, cosa fai se il server fornisce solo git: // access?
Rainb,

4

In alternativa, se hai installato Node.js , puoi utilizzare il seguente comando:

npx degit GIT_REPO

npxviene fornito con Node e consente di eseguire pacchetti binari basati su nodi senza prima installarli (in alternativa, è possibile prima installare a degitlivello globale utilizzando npm i -g degit).

Degit è uno strumento creato da Rich Harris, il creatore di Svelte e Rollup, che utilizza per creare rapidamente un nuovo progetto clonando un repository senza mantenere la cartella git. Ma può anche essere usato per clonare qualsiasi repository una volta ...


-1

Puoi sempre fare

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git

45
scaricare tutto ed eliminare la directory in seguito? ad esempio emacs ha il 95% di 1 GB in .git. quindi --depth = 1 è la soluzione qui chiaramente.
RParadox

1
vedo ancora la cartella .git quando faccio profondità = 1
Aryeh Armon,

@AryehArmon ovviamente lo vedi. L'uso di --depth non impedisce la creazione di .git, ma solo di renderlo una copia superficiale, dimensioni molto più ridotte per .git. Ma se non lo vuoi affatto, devi rimuoverlo in seguito.
zeycus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.