Come si clona un repository Git in una cartella specifica?


2244

L'esecuzione del comando git clone git@github.com:whatevercrea una directory nella mia cartella corrente denominata whatevere rilascia il contenuto del repository Git in quella cartella:

/httpdocs/whatever/public

Il mio problema è che ho bisogno del contenuto del repository Git clonato nella mia directory corrente in modo che appaiano nella posizione corretta per il server web:

/httpdocs/public

So come spostare i file dopo aver clonato il repository, ma questo sembra interrompere Git e mi piacerebbe poterlo aggiornare semplicemente chiamando git pull. Come posso fare questo?


3
Su Windows puoi spostare i file dalla cartella in cui clonerai il repository [se ce n'è uno] in modo che sia vuoto quando esegui git clone . Dopo la clonazione, sposta i file indietro [ctrl-z] e whoala ! Se la cartella corrente è vuota basta usare: git clone giturl .

44
voilà è l'ortografia
Matthias

81
@MatthiasDailey voilà è l' ortografia reale
silkfire

6
et voilà è il francese per et voilà
Fattie,

Risposte:


3222

Opzione A:

git clone git@github.com:whatever folder-name

Ergo, per l' right hereuso:

git clone git@github.com:whatever .

Opzione B:

Sposta anche la .gitcartella. Nota che la .gitcartella è nascosta nella maggior parte dei file explorer grafici, quindi assicurati di mostrare i file nascosti.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

La prima riga prende tutti i file normali, la seconda riga prende i file di punti. È anche possibile farlo in una riga abilitando dotglob (cioè shopt -s dotglob) ma questa è probabilmente una cattiva soluzione se stai ponendo la domanda a cui questa risposta risponde.

Meglio ancora:

Conserva la tua copia di lavoro altrove e crea un collegamento simbolico. Come questo:

ln -s /where/it/is/right/now /the/path/I/want/to/use

Per te questo sarebbe qualcosa del tipo:

ln -sfn /opt/projectA/prod/public /httpdocs/public

Che facilmente potrebbe essere cambiato per testare se lo volevi, cioè:

ln -sfn /opt/projectA/test/public /httpdocs/public

senza spostare i file. Aggiunto -fnnel caso in cui qualcuno stia copiando queste righe ( -fè forzato, -nevitare alcune interazioni spesso indesiderate con collegamenti già e non esistenti).

Se vuoi solo che funzioni, usa l'opzione A, se qualcun altro guarderà quello che hai fatto, usa l'opzione C.


8
Non avevo pensato alla tua opzione "Meglio ancora", e mi piace anche se non sono sicuro del perché. Quali sono i vantaggi di questo?
David Smith,

6
Probabilmente non offre alcun vantaggio in questo momento, ma potrebbe farti risparmiare un sacco di problemi se decidi di spostare le cose un giorno.
Can Berk Güder,

12
Inoltre puoi passare rapidamente da una versione all'altra con l'opzione "Meglio ancora". Ciò è particolarmente utile e utilizzato per i server.
Halil Özgür

4
@MEM Penso che significhi creare un collegamento simbolico a .git ieln -s path/to/.git path/to/working/directory
Alexander

27
Qualcuno può spiegare i vantaggi di questo ?? Sono un po 'denso oggi. In che modo l'utilizzo di un symlink avvantaggia i server?
tripla

586

L'esempio secondo cui molte persone fanno questa domanda è questo. Se ci si trova nella directory in cui si desidera scaricare il contenuto del repository git, eseguire:

git clone git@github.com:whatever .

Il "." alla fine specifica la cartella corrente come cartella di pagamento.


28
vero, quindi non vuoi eseguire "git init" in questa cartella prima di clonarla. Ma se lo hai fatto, rimuovere la cartella .git prima della clonazione farà il trucco.
Magne,

3
risolto per le directory vuote nella mia risposta
csomakk

1
non riuscivi a farlo funzionare in nitrous.io? anche dopo lo svuotamento, dice che la directory non è vuota
Tejas Manohar,

@TejasManohar Assicurati di aver eliminato anche i file nascosti.
Britico

ls -amostrerà tutti i file, inclusi quelli nascosti.
Michael Dorst,

215

Vai nella cartella .. Se la cartella è vuota, allora:

git clone git@github.com:whatever .

altro

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

9
In realtà questa è stata la risposta più utile per me quando avevo solo bisogno di trasferire il progetto già creato nel repository appena creato. Complimenti!
Wirher,

13
Solo risposta che specifica come effettuare il checkout in una cartella non vuota, grazie.
Preston Badeer,

2
Questo è davvero utile poiché switch -ton non è chiaramente mostrato sulla documentazione di Git Checkout .
Chetabahana,

4
cosa fa l'opzione -t? Ricevo un messaggio di interruzione con un elenco di file non monitorati che verranno sovrascritti dal checkout? Cosa fare in questa situazione? Non voglio che quei file vengano sovrascritti?
Momin Zahid,

2
-t documentazione da git: -t, --track Quando si crea un nuovo ramo, impostare la configurazione "upstream". Vedere "--track" in git-branch (1) per i dettagli.
csomakk,

87

Clonazione di base del repository Git

Clonare un repository con

git clone [url]

Ad esempio, se vuoi clonare la libreria Drital Open Framework Git della Stanford University chiamata open_framework, puoi farlo in questo modo:

$ git clone git://github.com/SU-SWS/open_framework.git

Ciò crea una directory denominata open_framework (nella posizione corrente del file system locale), inizializza una directory .git al suo interno, estrae tutti i dati per quel repository e estrae una copia funzionante dell'ultima versione. Se vai nella directory open_framework appena creata, vedrai i file di progetto lì dentro, pronti per essere lavorati o usati.

Clonazione di un repository in una cartella locale specifica

Se si desidera clonare il repository in una directory denominata qualcosa di diverso da open_framework, è possibile specificarlo come opzione successiva della riga di comando:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

Questo comando fa la stessa cosa di quello precedente, ma la directory di destinazione si chiama mynewtheme.

Git ha diversi protocolli di trasferimento che puoi usare. L'esempio precedente usa il protocollo git: //, ma potresti anche vedere http (s): // o user @ server: /path.git, che usa il protocollo di trasferimento SSH.


questo creerà automaticamente una cartella nella cartella corrente e vi inserirà i file. Pertanto, non è necessario preoccuparsi di sovrascrivere qualsiasi altra cartella.
arn-arn,

24

Per clonare il repository git in una cartella specifica, è possibile utilizzare un -C <path>parametro, ad es

git -C /httpdocs clone git@github.com:whatever

Sebbene creerà comunque una whatevercartella sopra di essa, quindi per clonare il contenuto del repository nella directory corrente, utilizzare la sintassi seguente:

cd /httpdocs
git clone git@github.com:whatever .

Si noti che la clonazione in una directory esistente è consentita solo quando la directory è vuota .

Dato che stai clonando in una cartella accessibile al pubblico, considera la possibilità di separare il tuo repository Git dall'albero di lavoro usando --separate-git-dir=<git dir>o escludendo la .gitcartella nella configurazione del tuo server web (ad es. Nel .htaccessfile).


17

Per clonare nella directory di lavoro attuale :

git clone https://github.com/link.git

Per clonare in un'altra directory :

git clone https://github.com/link.git ./Folder1/Folder2

Spero che sia d'aiuto :)


questo ha funzionato anche per me. non ./all'inizio del percorso della cartella
Alon Gouldman,

13

Quando si spostano i file nel punto desiderato, si sposta anche la .gitdirectory? A seconda del sistema operativo e della configurazione, questa directory potrebbe essere nascosta.

Contiene il repository e i file di supporto, mentre i file di progetto che si trovano nella /publicdirectory sono solo le versioni nel commit di check-out (ramo principale per impostazione predefinita).


13

Clone:

git clone git@jittre.unfuddle.com:jittre/name.git

Clona il "ramo specifico":

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git

13

Se vuoi clonare nella cartella corrente, dovresti provare questo:

git clone https://github.com/example/example.git ./

8
fatale: percorso di destinazione "." esiste già e non è una directory vuota.
Cleiton,

11

uso

git clone <repository>

Clonare il repository situato in <repository> sul computer locale. Il repository originale può trovarsi sul filesystem locale o su una macchina remota accessibile via HTTP o SSH.

git clone <repo> <directory>

Clonare il repository situato in <repository> nella cartella denominata <directory> sul computer locale.

Fonte: impostazione di un repository


9

Assicurati di rimuovere il repository .git se stai provando a fare il check out nella directory corrente.

rm -rf .git poi git clone https://github.com/symfony/symfony-sandbox.git


3

Ecco come lo farei, ma ho creato un alias per farlo per me.

$ cd ~Downloads/git; git clone https:git.foo/poo.git

C'è probabilmente un modo più elegante di farlo, tuttavia ho trovato che questo è il più semplice per me stesso.

Ecco l'alias che ho creato per velocizzare le cose. L'ho fatto per zsh, ma dovrebbe funzionare bene per bash o qualsiasi altra shell come pesce, xyzsh, fizsh e così via.

Modifica ~/.zshrc, /.bashrcecc. Con il tuo editor preferito (il mio è Leafpad, quindi scriverei $ leafpad ~/.zshrc).

La mia preferenza personale, tuttavia, è quella di creare un plugin zsh per tenere traccia di tutti i miei alias. Puoi creare un plugin personale per oh-my-zsh eseguendo questi comandi:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

Successivamente, aggiungi queste righe al tuo file alises.plugin vuoto appena creato:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(Da qui, sostituisci il tuo nome con il mio.)

Quindi, per far funzionare gli alias, essi (insieme a zsh) devono essere reperiti (o come si chiama). Per fare ciò, all'interno del documento del plug-in personalizzato aggiungi questo:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

Salva il tuo oh-my-zsh plugin ed eseguilo allsource. Se questo non sembra funzionare, esegui semplicemente source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Ciò caricherà la fonte del plug-in che ti consentirà di utilizzare allsourceda ora in poi.


Sono in procinto di creare un repository Git con tutti i miei alias. Non esitate a dare un'occhiata qui: i file dot di Ev . Non esitate a sborsare e migliorare su di loro per soddisfare le vostre esigenze.


2

Se stai usando sshper git cloningpuoi usare il seguente comando.

git -C path clone git@github.com:path_to_repo.git

es: git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.gittirerebbe il repository git requestssul tuo /home/ubuntu/percorso.


2

Da qualche ragione questa sintassi non si distingue:

git clone repo-url [folder]

Qui la cartella è un percorso opzionale per la cartella locale (che sarà un repository locale).

Git cloneeseguirà inoltre la pullcodifica dal repository remoto al repository locale. In effetti è vero:

git clone repo-url  =  git init + git remote add origin repo-url + git pull

0

Sebbene tutte le risposte sopra siano buone, vorrei proporre un nuovo metodo invece di usare il metodo di collegamento simbolico nella directory html pubblica come MIGLIORE proposto nella risposta accettata. Devi avere accesso alle configurazioni dell'host virtuale del tuo server.

Si tratta di configurare l'host virtuale del server Web che punta direttamente alla directory del repository. In Apache puoi farlo come:

DocumentRoot / var / www / html / website / your-git-repo

Ecco un esempio di un file host virtuale:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>

0

Puoi usare il seguente comando git per clonare con il nome della directory personalizzata

git clone <git_repo_url> <your_custom_directory_name>

Nota: non è necessario creare la directory personalizzata perché verrà creata automaticamente


-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .

-5

Per quanto riguarda questa riga dal post originale:

"So come spostare i file dopo aver clonato il repository, ma questo sembra interrompere Git"

Sono in grado di farlo e non vedo alcun problema finora con le mie operazioni di aggiunta, commit, push, pull.

Questo approccio è indicato sopra, ma non suddiviso in fasi. Ecco i passaggi che funzionano per me:

  1. clonare il repository in qualsiasi nuova cartella temporanea
  2. cd nella cartella principale appena clonata localmente
  3. copia l'intero contenuto della cartella, inclusa la directory /.git, in qualsiasi cartella esistente che ti piace; (dì un progetto eclissi che vuoi unire con il tuo repository)

La cartella esistente in cui hai appena copiato i file è ora pronta per interagire con 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.