Clonare i contenuti di un repository GitHub (senza la cartella stessa)


233

Vorrei git cloneil contenuto di un repository che ho su GitHub . Quando git clone(git @ github: me / name.git ...) ricevo una cartella chiamata name/e all'interno del nome ho i miei contenuti ... Come posso ottenere SOLO i contenuti?



Per saltare in realtà il download di oggetti non necessari per risparmiare risorse di rete: stackoverflow.com/questions/600079/...
Ciro Santilli郝海东冠状病六四事件法轮功

Risposte:


314

Se la directory corrente è vuota, puoi farlo con:

git clone git@github:me/name.git .

(Nota .alla fine per specificare la directory corrente.) Naturalmente, questo crea anche la .gitdirectory nella cartella corrente, non solo il codice sorgente del tuo progetto.

Questo [directory]parametro facoltativo è documentato nella git clonepagina del manuale , che indica che la clonazione in una directory esistente è consentita solo se tale directory è vuota.


2
Sfortunatamente, questo non funziona se ci sono altre directory non correlate già nella stessa directory. Alla ricerca di una soluzione. Il messaggio di errore è: "fatale: percorso di destinazione '.' esiste già ... "
John Little,

12
La directory in cui clona git deve essere vuota
jolyonruss

1
@HumaunRashid Aggiungi un .come discusso nella risposta: git clone https://github.com/humaun21/Test .. E sì, git@github.me/name.gitè un segnaposto per qualunque sia il tuo vero indirizzo repository git.
Aaron Campbell,

1
@JohnLittle Ha avuto lo stesso problema, si scopre che esiste un file .DS_Store nascosto che si nasconde lì. Semplicemente rm .DS_Storee sei a posto.
Selrond

1
Se stai lavorando su un sistema operativo Linux, devi assicurarti che la directory sia vuota, incluso il controllo di file e sottodirectory nascosti. Puoi farlo con ls -a. Dovresti avere solo. e .. come output. Questo non funzionerà diversamente
Ayo Makanjuola,

156

Sfortunatamente, questo non funziona se ci sono altre directory non correlate già nella stessa directory. Alla ricerca di una soluzione. Il messaggio di errore è: "fatale: percorso di destinazione '.' esiste già...".

La soluzione in questo caso è:

git init
git remote add origin git@github.com:me/name.git
git pull origin master

Questa ricetta funziona anche se ci sono altre directory in quella in cui vuoi fare il checkout.


Ehi, sto ricevendo un errore come Autorizzazione negata <chiave pubblica>. L'estremità remota si bloccava inaspettatamente.
Stan,

Non dovrebbe essere github.comlì dopo git remote ..., e non solo github?
AMN

5
Questa risposta avrebbe dovuto essere accettata una. funziona perfettamente.
vikramvi,

Ho letto altrove qui che è necessario eseguire git fetch --allprima di git pull origin master, perché se ci sono altri rami nel repository, git pullnon li otterrà se non si utilizza fetchprima. È corretto?
Alex G,

38

Se la cartella non è vuota, una versione leggermente modificata della risposta di @ JohnLittle ha funzionato per me:

git init
git remote add origin https://github.com/me/name.git
git pull origin master

Come sottolineato da @ peter-cordes, l'unica differenza sta usando il protocollo https invece di git, per il quale è necessario configurare le chiavi SSH .


Quale versione di Git stai eseguendo? Questo non ha funzionato per me. Non mi consente ancora di configurarlo perché la
directory

@ guribe94 git versione 2.5.0
Tomáš Zemanovič

3
Questa è la stessa risposta, usando solo https anonimo invece di git-protocol su ssh (che richiede un account github con un set di chiavi ssh impostato).
Peter Cordes,

15

Puoi specificare la directory di destinazione come secondo parametro del git clonecomando, quindi puoi fare:

git clone <remote> .

Questo clonerà il repository direttamente nella directory locale corrente.


2

per clonare git repo nella cartella corrente e vuota (no git init) e se non si utilizza ssh:

git clone https://github.com/accountName/repoName.git .

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.