Eu tenho o diretório A com os arquivos correspondentes ao diretório B. O diretório A pode ter outros arquivos necessários. O diretório B é um repositório git.
Eu quero clonar o diretório B no diretório A, mas o git-clone não me permite, pois o diretório não está vazio.
Eu esperava que clonasse .git e, como todos os arquivos correspondem, eu poderia ir de lá?
Não consigo clonar em um diretório vazio porque tenho arquivos no diretório A que não estão no diretório B e quero mantê-los.
Copiar .git não é uma opção, pois quero que os árbitros pressionem / puxem e não quero configurá-los manualmente.
Há alguma maneira de fazer isso?
Atualização: Eu acho que isso funciona, alguém pode ver algum problema? ->
cd a
git clone --no-hardlinks --no-checkout ../b a.tmp
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this
Respostas:
Isso funcionou para mim:
NOTA:
-t
definirá a ramificação upstream para você, se é isso que você deseja, e geralmente é.fonte
git reset origin/master
após o trabalhogit fetch
, ele funcionará (também preservando as alterações locais).git checkout ...
git reclama que todos os meus arquivos seriam substituídos, devo movê-los primeiro. Quando eu faço `git reset origin / master /` primeiro, o comando checkout reclama que um ramo chamado master já existe.git checkout master
foi um passo final suficiente para mim.fatal: A branch named 'master' already exists
. Eu acho que realmente não precisava disso.Nos comandos shell a seguir,
existing-dir
há um diretório cujo conteúdo corresponde aos arquivos rastreados norepo-to-clone
repositório git.fonte
git reset --hard HEAD
ou não desistiria dos arquivos "excluídos".git reset HEAD
funcionou bem para mim.git reset --hard HEAD
destrói quaisquer alterações em seus arquivos; portanto, se elas não são exatamente iguais aos arquivos no repositório, você não deve fazer isso.git reset HEAD
não parece ter nenhum efeito para mim.git reset --hard HEAD
faz - mas isso perde as alterações que você fez nos arquivos. Existe uma solução melhor?Uma pequena modificação em uma das respostas que funcionaram para mim:
para começar a trabalhar no ramo mestre imediatamente.
fonte
git branch --set-upstream-to=origin/master master
.Aviso - isso pode sobrescrever arquivos.
Modificado a partir da resposta de @ cmcginty - sem o -f não funcionou para mim
fonte
git checkout .
?Aqui está o que acabei fazendo quando tive o mesmo problema (pelo menos acho que é o mesmo problema). Entrei no diretório A e corri
git init
.Como não queria que os arquivos no diretório A fossem seguidos pelo git, editei .gitignore e adicionei os arquivos existentes. Depois disso, corri
git remote add origin '<url>' && git pull origin master
et voíla, B é "clonado" em A sem um único soluço.fonte
Eu usei isso alguns momentos atrás, requer os comandos menos potencialmente destrutivos:
E voilá!
fonte
Outra receita simples parece funcionar bem para mim:
Meu principal caso de uso para acessar um diretório com arquivos existentes é controlar meus arquivos de ponto do Unix com o Git. Em uma nova conta, o diretório inicial já terá alguns arquivos, possivelmente até os que eu quero obter do Git.
fonte
.git/config
arquivo indica que os repositórios estão vazios. 2.) Os arquivos normalmente armazenados.git
são armazenados na raiz (que você chamou.git
).git
e definircore.bare
afalse
vai cuidar, então eu ainda se sentir bem sobre este método.Isso funcionou para mim:
fonte
Eu tive um problema semelhante com um novo diretório da web Apache (conta criada com WHM) que planejei usar como um servidor da Web de teste. Inicialmente, eu precisava clonar meu novo projeto com a base de código e implantar periodicamente as alterações, retirando do repositório.
O problema era que a conta já continha arquivos do servidor da web, como:
... que eu não queria excluir ou confirmar no meu repositório. Eu precisava deles para ficar lá sem palco e sem controle.
O que eu fiz:
Eu fui para minha pasta da web (pasta existente):
e depois:
Ele exibia (como esperado) uma lista de muitos arquivos não testados - aqueles que já existiam inicialmente na minha conta da web do cPanel.
Então, graças a este artigo , adicionei a lista desses arquivos a:
Esse arquivo, quase como o
.gitignore
arquivo, permite que você ignore os arquivos que estão sendo preparados. Depois disso, eu não tinha mais nada para confirmar no diretório .git / - ele funciona como um pessoal.gitignore
que ninguém mais pode ver.Agora verificando
git status
retornos:Agora eu posso implantar alterações neste servidor da Web, simplesmente retirando do meu repositório git. Espero que isso ajude alguns desenvolvedores da Web a criar facilmente um servidor intermediário.
fonte
Aqui está o que estou fazendo:
fonte
Talvez eu tenha entendido mal a sua pergunta, mas não seria mais simples se você copiar / mover os arquivos de A para o repositório git B e adicionar os necessários com o git add ?
ATUALIZAÇÃO: No documento git:
FONTE: http://git-scm.com/docs/git-clone
fonte
Eu estava procurando por algo semelhante, e aqui está o que eu vim com:
Minha situação é aquela em que tenho uma árvore da web ativa e eu estava tentando criar um repositório remoto para ela sem mover nenhum dos arquivos da árvore da web atual. Aqui está o que eu fiz:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
seção.[remote "origin"]
seção ao .git / config na árvore da web apontando para o novo repositório remoto.fonte
git clone --bare
aqui é supérfluo e tortuoso. Por que não apenasgit remote add origin <URL>
em primeiro lugar?isso é bom para mim, mas você deve mesclar os arquivos do repositório remoto aos arquivos locais:
fonte
Gostei da resposta de Dale e também adicionei
A profundidade rasa evitou muitos commits extras extras. O novo ramo nos deu uma boa história visual de que havia algum código novo desse servidor que foi colocado. Esse é o ramo de uso perfeito na minha opinião. Meus agradecimentos à grande visão de todas as pessoas que postaram aqui.
fonte
Eu tenho os mesmos problemas ao tentar clonar em c / code
Mas essa pasta contém vários projetos.
Criei uma nova pasta em c / code / newproject e mapeei meu clone para essa pasta.
O git para desktop pediu o meu usuário e clonou bem.
fonte