Criando um espelho oficial do github

108

Como faço para criar um espelho github para um repositório git externo, de forma que apareça como "espelho real", por exemplo, como em https://github.com/mirrors ?

Até agora, configurei um espelho usando:

cd /path/to/bare/repository
git remote add --mirror github [email protected]:user/repo.git

e configurar o gancho de recebimento de postagem para fazer a git push --quiet github. Dessa forma, no entanto, o github não reconhece o espelho.

Alguma ideia de como fazer isso do modo github, de modo que "Mirrorred de" apareça abaixo do nome do repositório?

mavam
fonte
2
github.com/apache/libcloud outro exemplo de repo espelhado, tudo do Apache LOL
Colin Su

Respostas:

113

Com base na comunicação com a equipe de suporte do GitHub, descobri que o GitHub atualmente não oferece nenhum mecanismo direto para um usuário espelhar repositórios dessa maneira.

No entanto, pode-se pedir ao GitHub para instalar este serviço para repositórios que fazem parte de uma organização. O GitHub então configura um repositório existente como um espelho e extrai dele em um intervalo que é uma função do número de espelhos gerais que eles possuem.

EDITAR : como Stuart aponta, o GitHub não aceita mais solicitações de espelhamento de repositórios arbitrários. A única opção restante é a solução que postei na minha pergunta, ou seja, criar um gancho pós-recebimento para enviar automaticamente para seu repositório GitHub.

mavam
fonte
9

A julgar pelo conteúdo atual de https://github.com/mirrors , parece que o GitHub não faz mais "espelhos oficiais", já que a maioria dos projetos que desejam seu código espelhado no GitHub hoje apenas fazem uma organização para ele, como o próprio Git .

Também há uma solicitação de recurso em: https://github.com/isaacs/github/issues/415

Stuart P. Bentley
fonte
Na verdade, alguns deles têm repositórios espelhados no GitHub. Eles ainda fazem isso, mas apenas se você for um desenvolvedor do projeto, ou seja, nenhum espelho "não oficial".
nyuszika7h
E como se costuma dizer, apenas para organizações.
nyuszika7h
4

De acordo com Importando um Git :

Para fins de demonstração, usaremos:

  • Uma conta externa chamada extuser
  • Uma conta de usuário pessoal do GitHub chamada ghuser
  • Um repositório GitHub denominado repo.git

A linha de comando:

# Makes a bare clone of the external repository in a local directory  
$ git clone --bare https://githost.org/extuser/repo.git

# Pushes the mirror to the new GitHub repository
$ cd *repo.git*
$ git push --mirror https://github.com/ghuser/repo.git

# Remove the temporary local repository.
$ cd ..
$ rm -rf repo.git
Chetabahana
fonte
1
Qual é a diferença entre git clone --baree git clone --mirror? A segunda variante não é mais adequada aqui?
user7610
0

Usei uma ferramenta chamada github-backup com sucesso moderado para, se não espelhar, pelo menos fazer um backup completo (incluindo problemas e outros metadados) de um usuário ou organização do Github. Para citar o arquivo README :

Cada vez que você executar o github-backup, ele encontrará novos garfos no GitHub. Ele adicionará controles remotos ao seu repositório para os garfos, usando nomes como github_torvalds_subsurface. Vai buscar em cada bifurcação.

Ele baixa metadados de cada bifurcação. Isso é armazenado em um branch chamado "github". Cada bifurcação obtém um diretório lá, como torvalds_subsurface. Dentro do diretório haverá alguns arquivos, como torvalds_subsurface/watchers. Pode haver outros diretórios, como para comentários: torvalds_subsurface/comments/1.

Você pode seguir os commits para o branch do github para ver quais informações mudaram no GitHub ao longo do tempo.

O formato dos arquivos na ramificação github é atualmente os tipos de dados serializados Haskell. Este é um texto simples e legível, se você apertar os olhos.

As limitações incluem:

  • sem suporte de repositório privado
  • sem coisas "sociais" como estrelas, seguidores, etc.
  • notas para linhas de commits não são suportadas (ainda?)
  • rótulos de problemas
anarcat
fonte