Estou fazendo:
git clone ssh://[email protected]/home/user/private/repos/project_hub.git ./
Estou entendendo:
Fatal: caminho de destino '.' já existe e não é um diretório vazio.
Eu sei o caminho. já existe. E posso garantir que o diretório esteja vazio. (Eu estou dentro e não vejo nada!)
O que estou perdendo aqui para clonar esse projeto no diretório atual?
ls -a
vê um.git
diretório?Respostas:
basta colocar um ponto ao lado dele
De
git help clone
:Portanto, verifique se o diretório está vazio (verifique com
ls -a
), caso contrário, o comando falhará.fonte
ls -la
mkdir
cria hardlinks para.
e..
por padrão, então um novo diretório é tecnicamente "vazio" em sistemas baseados em Unix? Quer dizer, eu acho que você poderiaunlink .
eunlink ..
, mas que pode causar enormes problemas mais tarde se você esquecer de re-ligação novamente após clonagem ....O seguinte provavelmente não é totalmente equivalente a um clone em todos os casos, mas fez o truque para mim:
No meu caso, isso produz um
.git/config
arquivo equivalente ao que recebo ao fazer um clone.fonte
*
(ignorar tudo), eu poderia executar,git checkout master
mesmo que já houvesse outros arquivos na pasta. Todos os arquivos confirmados do repositório foram clonados (e o .gitignore temporário foi sobrescrito pelo .gitignore apropriado do repositório). Tudo funcionou maravilhosamente. Deve acontecer dessa maneira por si só usandogit clone -f
ou algo assim.-t \*
é desnecessário, pois é o padrão.git remote set-head origin -a
pode ser útil. Ele define o branch padrão da origem (refs/remotes/origin/HEAD
) conforme definido no repositório remoto.git clone
faz isso automaticamente, ao contráriogit remote add -f
.@ Andrew respondeu claramente aqui . Mas tão simples quanto isso também funciona, mesmo que o diretório não esteja vazio:
fonte
<repository-url>
que também pode ser um repo local comogit remote add origin /path/to/existing/repo
Para ter certeza de que você pode clonar o repositório, vá para qualquer diretório temporário e clone o projeto lá:
Isso clonará suas coisas em um
project_hub
diretório.Depois que a clonagem terminar, você poderá mover este diretório para onde quiser:
Isso é seguro e não requer nenhum material mágico por perto.
fonte
/path/to/new/location
diretório preexistente que certamente não é o ponto da questão.fonte
Faz
O diretório deve estar vazio
fonte
Hmm ... especificar o caminho da corrente absoluta usando
$(pwd)
funcionou para mim.versão git: 2.21.0
fonte
Se o diretório atual estiver vazio, isso funcionará:
fonte
Além da resposta de @ StephaneDelcroix, antes de usar:
verifique se o diretório atual está vazio usando
fonte
Solução: Nesse caso, a solução estava usando o
dot
, então:rm -rf .* && git clone ssh://[email protected]/home/user/private/repos/project_hub.git .
rm -rf .* &&
pode ser omitido se tivermos certeza absoluta de que o diretório está vazio.Os créditos vão para: @James McLaughlin nos comentários abaixo.
fonte
ls -d .*
. ..
me: ~ / tmp / tmp / tmp $rm -rf ./.*
é "mais seguro" se você apenas remover os arquivos e diretórios ocultos (pontos) sob o diretório atual (exatamente como @stackunderflow declarou antes de mim). Masrm -rf
é um comando perigoso para os usuários inexperientes, portanto, tenha cuidado! Apenas meus 2 centavos..git
depoisgit init
(eu sabia que)-rf
excluir arquivos normais. Considere excluir esta resposta ou, pelo menos, aceitar uma resposta diferente.Melhorando a resposta do @ GoZoner:
O comando shopt é obtido desta resposta do SO e altera o comportamento do comando 'mv' no Bash para incluir arquivos de ponto, que você precisará incluir no diretório .git e em qualquer outro arquivo oculto.
Observe também que isso só funcionará como está se o diretório atual (.) Estiver vazio, mas funcionará desde que nenhum dos arquivos no repositório clonado tenha o mesmo nome que os arquivos no diretório atual. Se você não se importa com o que está no diretório atual, pode adicionar a opção -f (force) ao comando 'mv'.
fonte
Eu tive essa mesma necessidade. No meu caso, eu tinha uma pasta da web padrão criada por uma instalação do servidor da web. Para os fins desta ilustração, digamos que seja
/server/webroot
e o webroot contém outros arquivos e pastas padrão. Meu repositório apenas possui os arquivos específicos do site (html, javascript, CFML etc.)
Tudo que eu tinha que fazer era:
Você precisa ter o cuidado de executar o git init na pasta de destino, porque se NÃO fizer isso, uma das duas coisas acontecerá:
Isso NÃO perturbou nenhum dos arquivos "padrão" que tenho na minha pasta raiz da web, mas precisei adicioná-los ao arquivo .gitignore para impedir a adição inadvertida deles às confirmações subsequentes.
Essa parece ser uma maneira fácil de "clonar" em um diretório não vazio. Se você não deseja que os arquivos .git e .gitignore sejam criados pelo pull, basta excluí-los após o pull.
fonte
Melhorando ainda mais a resposta do @ phatblat :
como um forro:
git clone --no-checkout <repository> tmp && mv tmp/.git . && rmdir tmp && git checkout master
fonte
fonte
use. (ponto) no final do seu comando, como abaixo
URL do clone git .
fonte
fatal: destination path '.' already exists and is not an empty directory.
Aqui estava o que eu encontrei:
Eu vejo isso:
Entre minhas pesquisas, eu tropecei em:
https://couchpota.to/forum/viewtopic.php?t=3943
Procure a entrada de Clinton. Hall ... Se você tentar isso (como eu fiz), provavelmente obterá a
access denied
resposta, houve a minha primeira pista; portanto, o erro inicial (para mim) estava realmente escapando à raiz errada questão.Solução para isso no Windows: certifique-se de executar
cmd
ougit elevated
, em seguida, execute:O problema acima foi meu e simplesmente elevar funcionou para mim.
fonte
A solução
Windows
é clonar o repositório em outra pasta e copiar e colar no local original ou apenas copiar a.git
pasta invisível.fonte
Removendo com
pode causar problemas ou mais alguns erros.
Se você possui / caminho / para / pasta e gostaria de remover tudo o que está dentro, mas não a pasta, basta executar:
fonte
Portanto, corrigi esse mesmo erro excluindo a pasta .git oculta no meu diretório raiz e adicionando um ponto ao 'repositório de clones do git'. na minha pasta raiz / dist. Isso está no contexto de um projeto do webpack vue-cli. Portanto, o que todo mundo está dizendo está certo, geralmente significa que você tem o git tracking na pasta na qual você está tentando clonar ou na pasta pai ou raiz da pasta em questão!
fonte
fonte
se o repo for privado, primeiro adicione sua chave ssh use => git clone [email protected]: yourusername / yourrepo.git else use => git clone https://github.com/yourusername/yourrepo.git
fonte
é útil criar um novo arquivo e
mkdir filename
, em seguida, executar o comando degit clone xxxxx
, ele funciona no meu computadorfonte
Eu já vi essa pergunta tantas vezes - e só quero ressaltar que
git pull
de dentro do seu diretório fará o truque.A menos que eu esteja perdendo alguma coisa aqui - que funcionou para mim.
fonte
git pull
não fará nada se você não tiver um repositório definido, o que é uma parte crítica do quegit clone
faz.