Como duplicar um repositório git? (sem bifurcação)


117

Tenho dois repositórios e preciso copiar um inteiro para o outro vazio, que tem níveis de acesso diferentes do primeiro. A cópia e o repositório mãe não devem ser vinculados.

Eu sou novo no git e seria incrível se alguém pudesse me ajudar com isso.


5
não tenho certeza, mas acho que você poderia simplesmente cloná-lo e usar git config remote.origin.url git: //new.url/proj.git para definir o remote.origin para seu novo representante.
Rufinus

sim o link que acabei de postar faz algo parecido.
nbz

@rudinus eu fiz exatamente isso. Obrigado.
cowboybebop

Respostas:


205

Veja https://help.github.com/articles/duplicating-a-repository

Versão curta:

Para fazer uma duplicata exata, você precisa executar tanto um clone puro quanto um espelho-push:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

NOTA: o acima funcionará bem com qualquer repositório git remoto, as instruções não são específicas do github

O exemplo acima cria uma nova cópia remota do repo. Em seguida, cloná-lo para sua máquina de trabalho.


2
O que aconteceria se o antigo e o novo Repositórios tivessem o mesmo nome (e não a mesma URL git). Como em, acabei de Jeremy.gitJeremy.git
clonar

Esta não será uma duplicata exata. Os problemas não serão transferidos.
Slam

Isso preserva a história?
Thomas

@Thomas acabei de fazer isso e sim, preservou toda a minha história na cópia. Observe que depois de enviar e fazer cd no novo repo, ainda não há nada lá porque você
acionou

7
Para que esta resposta funcione com o GitHub, é necessário primeiro criar o novo repositório no GitHub.
Alex Holcombe

22

Você também pode usar git-copy .

Instale com Gem,

gem install git-copy

Então

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git

1
Como você instala a gema em primeiro lugar? Esta parece ser a solução mais simples. Votado!
saran3h

Geralmente é parte de uma instalação do Ruby. No Ubuntu, faça sudo apt install ruby.
dano em

9

Se estiver copiando para o GitHub, você pode usar o Importador do GitHub para fazer isso por você. O repositório original pode até ser de outros sistemas de controle de versão.


4
Isso funciona perfeitamente e até mantém a história - deve ser mais votado
John D

1
Concordo. Essa abordagem é muito mais intuitiva, pode ser feita inteiramente dentro da GUI do Github e não envolve nenhum daqueles disparates confusos de linha de comando. Passos: 1) Na GUI, faça o novo repo, mas não clique na caixa de seleção "Inicializar este repositório com um README" Depois de fazer isso, o Github apresentará uma nova página e uma opção chamada "... ou importar código de outro repositório. " É isso aí!
Lucas F.

5

Se você deseja apenas criar um novo repositório usando todos ou a maioria dos arquivos de um existente (ou seja, como uma espécie de modelo), acho que a abordagem mais fácil é fazer um novo repositório com o nome desejado etc, cloná-lo para sua área de trabalho e, em seguida, basta adicionar os arquivos e pastas desejados.

Você não obtém toda a história etc., mas provavelmente não quer isso neste caso.


-1

Abra o Terminal.

Crie um clone simples do repositório.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git


Tentei sua abordagem. E recebo esta mensagem de erro:! [remoto rejeitado] mestre -> mestre (gancho de pré-recepção recusado) e várias outras mensagens semelhantes. O último foi: erro: falhou em empurrar alguns refs. Como posso corrigir isso?
LND
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.