Como você clona um repositório Git em uma pasta específica?


2244

A execução do comando git clone git@github.com:whatevercria um diretório na minha pasta atual denominada whatevere coloca o conteúdo do repositório Git nessa pasta:

/httpdocs/whatever/public

Meu problema é que preciso que o conteúdo do repositório Git seja clonado no meu diretório atual para que eles apareçam no local apropriado para o servidor da Web:

/httpdocs/public

Eu sei como mover os arquivos depois de clonar o repositório, mas isso parece quebrar o Git, e eu gostaria de poder atualizar apenas ligando git pull. Como posso fazer isso?


3
No Windows, você pode mover os arquivos da pasta em que clonará o repositório [se houver], para que fique vazio quando você fizer o git clone . Após a clonagem, mova seus arquivos de volta [ctrl-z] e whoala ! Se a pasta atual estiver vazia, use: git clone giturl .

44
voila é a ortografia
— Matthias

81
@MatthiasDailey voilà é a actual ortografia
— silkfire

6
et voilà é francês para et voilà
— Fattie 01/02

Respostas:


3221

Opção A:

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

Ergo, para right hereuso:

git clone git@github.com:whatever .

Opção B:

Mova a .gitpasta também. Observe que a .gitpasta está oculta na maioria dos exploradores gráficos de arquivos, portanto, certifique-se de mostrar os arquivos ocultos.

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

A primeira linha pega todos os arquivos normais, a segunda linha pega arquivos de ponto. Também é possível fazê-lo em uma linha ativando o dotglob (ie shopt -s dotglob), mas essa provavelmente é uma solução ruim se você estiver fazendo a pergunta que esta resposta responde.

Melhor ainda:

Mantenha sua cópia de trabalho em outro lugar e crie um link simbólico. Como isso:

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

Para o seu caso, isso seria algo como:

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

O que poderia ser facilmente alterado para testar se você quisesse, ou seja:

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

sem mover arquivos. Adicionado -fnno caso de alguém copiar essas linhas ( -fforçar, -nevite algumas interações indesejadas com links já existentes e não existentes).

Se você quiser que ele funcione, use a Opção A; se alguém quiser ver o que você fez, use a Opção C.


8
Eu não tinha pensado na sua opção "Melhor ainda" e gosto, embora não tenha certeza do porquê. Quais são as vantagens disso?
— 21415 David Smith

6
Provavelmente não oferece nenhuma vantagem no momento, mas pode poupar muitos problemas se você decidir mudar as coisas um dia.
— Can Berk Guder

12
Além disso, você pode alternar entre os lançamentos rapidamente com a opção "Melhor ainda". Isso é especialmente útil e usado para servidores.
— Halil Özgür

4
@MEM Eu acho que ele significa criar um link simbólico para .git ieln -s path/to/.git path/to/working/directory
— Alexander

27
Alguém pode explicar os benefícios disso? Estou sendo um pouco denso hoje. Como o uso de um link simbólico beneficia os servidores?
— triple

586

O exemplo que acho que muitas pessoas estão fazendo é o seguinte. Se você estiver no diretório em que deseja despejar o conteúdo do repositório git, execute:

git clone git@github.com:whatever .

O "." no final especifica a pasta atual como a pasta de checkout.


28
true, então você não deseja executar o "git init" nesta pasta antes de cloná-la. Mas se você fez isso, remover a pasta .git antes da clonagem fará o truque.
— Magne

3
corrigido para diretórios vazios na minha resposta
— csomakk

1
Não foi possível fazer isso funcionar no nitous.io? mesmo depois de esvaziar, diz diretório não está vazio
— Tejas Manohar

@TejasManohar Certifique-se de que você também excluiu arquivos ocultos.
— Britic

ls -airá mostrar todos os arquivos, incluindo os ocultos.
— Michael Dorst

215

Vá para a pasta. Se a pasta estiver vazia, então:

git clone git@github.com:whatever .

outro

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

9
Na verdade, essa foi a resposta mais útil para mim quando eu apenas precisei enviar o projeto já criado para o repositório recém-criado. Parabéns!
— Wirher 28/11/14

13
Resposta apenas que especifica como fazer checkout em uma pasta não vazia, obrigado.
— Preston Badeer 21/03

2
Isso é realmente útil, pois o switch -ton não é mostrado claramente na documentação do git checkout .
— Chetabahana

4
o que a opção -t faz? Estou recebendo uma mensagem de cancelamento com uma lista de arquivos não rastreados que serão substituídos pelo checkout? O que fazer nessa situação? Não quero que esses arquivos sejam substituídos?
— Momin Zahid

2
-t documentação do git: -t, --track Ao criar uma nova ramificação, configure a configuração "upstream". Veja "--track" no git-branch (1) para detalhes.
— precisa saber é o seguinte

87

Clonagem básica de repositório Git

Você clona um repositório com

git clone [url]

Por exemplo, se você deseja clonar a biblioteca Git do Framework Aberto Drupal da Universidade de Stanford chamada open_framework, é possível fazer o seguinte:

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

Isso cria um diretório chamado open_framework (no local atual do sistema de arquivos), inicializa um diretório .git dentro dele, extrai todos os dados desse repositório e faz check-out de uma cópia de trabalho da versão mais recente. Se você for para o diretório open_framework recém-criado, verá os arquivos do projeto, prontos para serem trabalhados ou usados.

Clonando um Repositório em uma Pasta Local Específica

Se você deseja clonar o repositório em um diretório chamado algo diferente de open_framework, é possível especificar isso como a próxima opção da linha de comandos:

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

Esse comando faz a mesma coisa que o anterior, mas o diretório de destino é chamado mynewtheme.

O Git possui vários protocolos de transferência diferentes que você pode usar. O exemplo anterior usa o protocolo git: //, mas você também pode ver http (s): // ou user @ server: /path.git, que usa o protocolo de transferência SSH.


isso criará automaticamente uma pasta na sua pasta atual e colocará os arquivos lá. Portanto, você não precisa se preocupar em substituir nenhuma outra pasta.
— Arn-arn 27/03

24

Para clonar o repositório git em uma pasta específica, você pode usar o -C <path>parâmetro, por exemplo

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

Embora ainda crie uma whateverpasta em cima dela, para clonar o conteúdo do repositório no diretório atual, use a seguinte sintaxe:

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

Observe que a clonagem em um diretório existente é permitida apenas quando o diretório está vazio .

Como você está clonando em uma pasta acessível ao público, considere separar seu repositório Git da sua árvore de trabalho usando --separate-git-dir=<git dir>ou excluindo a .gitpasta na configuração do servidor da web (por exemplo, no .htaccessarquivo).


17

Para clonar no Present Working Directory :

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

Para clonar para outro diretório :

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

Espero que ajude :)


Isso funcionou para mim também. não ./no início do caminho para a pasta
— Alon Gouldman

13

Quando você move os arquivos para onde deseja, também está movendo o .gitdiretório? Dependendo do sistema operacional e da configuração, esse diretório pode estar oculto.

Ele contém o repositório e os arquivos de suporte, enquanto os arquivos de projeto que estão no seu /publicdiretório são apenas as versões no commit de check-out atualmente (ramificação mestre por padrão).


13

Clone:

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

Clone o "ramo específico":

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

13

Se você deseja clonar na pasta atual, tente o seguinte:

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

8
fatal: caminho de destino '.' já existe e não é um diretório vazio.
— Cleiton

11

Uso

git clone <repository>

Clone o repositório localizado no <repositório> na máquina local. O repositório original pode estar localizado no sistema de arquivos local ou em uma máquina remota acessível via HTTP ou SSH.

git clone <repo> <directory>

Clone o repositório localizado em <repository> na pasta chamada <directory> na máquina local.

Fonte: Configurando um Repositório


9

Certifique-se de remover o repositório .git se você estiver tentando fazer check-out no diretório atual.

rm -rf .git então git clone https://github.com/symfony/symfony-sandbox.git


3

Aqui está como eu faria isso, mas criei um alias para fazer isso por mim.

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

Provavelmente existe uma maneira mais elegante de fazer isso, no entanto, achei que isso era mais fácil para mim.

Aqui está o alias que eu criei para acelerar as coisas. Eu fiz para o zsh, mas deve funcionar muito bem para o bash ou qualquer outra concha, como fish, xyzsh, fizsh e assim por diante.

Edite ~/.zshrc, /.bashrcetc. com o seu editor favorito (o meu é o Leafpad, então eu escreveria $ leafpad ~/.zshrc).

Minha preferência pessoal, no entanto, é criar um plugin zsh para acompanhar todos os meus aliases. Você pode criar um plugin pessoal para oh-my-zsh executando estes comandos:

$ 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'

Depois, adicione essas linhas ao seu arquivo alises.plugin em branco recém-criado:

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

(A partir daqui, substitua seu nome pelo meu.)

Então, para que os aliases funcionem, eles (junto com o zsh) precisam ser originados (ou como quer que seja chamado). Para fazer isso, dentro do seu documento de plug-in personalizado, adicione isto:

## 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 "

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

Salve seu plugin oh-my-zsh e execute allsource. Se isso não funcionar, basta executar source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Isso carregará a fonte do plug-in, que permitirá que você use a allsourcepartir de agora.


Estou no processo de criar um repositório Git com todos os meus aliases. Fique à vontade para vê-los aqui: arquivos de pontos de Ev . Por favor, sinta-se à vontade para bifurcar e aperfeiçoá-los para atender às suas necessidades.


2

Se você estiver usando sshpara git cloningque você pode usar o comando a seguir.

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

por exemplo: git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.gitpuxaria o repositório git para o requestsseu /home/ubuntu/caminho.


2

Por alguma razão, essa sintaxe não se destaca:

git clone repo-url [folder]

Aqui, a pasta é um caminho opcional para a pasta local (que será um repositório local).

O Git clonetambém pullcodifica do repositório remoto para o repositório local. De fato, é verdade:

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

0

Embora todas as respostas acima sejam boas, eu gostaria de propor um novo método em vez de usar o método de link simbólico no diretório público do html como BEST proposto na resposta aceita. Você precisa ter acesso às configurações de host virtual do servidor.

Trata-se de configurar o host virtual do seu servidor da web apontando diretamente para o diretório do repositório. No Apache, você pode fazê-lo como:

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

Aqui está um exemplo de um arquivo host virtual:

<VirtualHost *:443>
    ServerName example.com

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

0

Você pode usar o seguinte comando git para clonar com o nome do diretório customizado

git clone <git_repo_url> <your_custom_directory_name>

Nota: Você não precisa criar seu diretório custome, porque ele criará 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

Em relação a esta linha do post original:

"Eu sei como mover os arquivos depois de clonar o repositório, mas isso parece quebrar o git"

Eu sou capaz de fazer isso e não vejo nenhum problema até agora com minhas operações de adição, confirmação, envio e recebimento.

Essa abordagem é mencionada acima, mas não é dividida em etapas. Aqui estão as etapas que funcionam para mim:

  1. clonar o repositório em qualquer pasta temporária nova
  2. CD nessa pasta raiz que você acabou de clonar localmente
  3. copie todo o conteúdo da pasta, incluindo o diretório /.git - em qualquer pasta existente que você desejar; (diga um projeto eclipse que você deseja mesclar com seu repo)

A pasta existente em que você acabou de copiar os arquivos agora está pronta para interagir com o git.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.