Como posso converter um repositório Git 'normal' em um repositório simples?
A principal diferença parece ser:
no repositório Git normal, você tem uma
.git
pasta dentro do repositório contendo todos os dados relevantes e todos os outros arquivos que compõem sua cópia de trabalhoem um repositório simples do Git, não há cópia de trabalho e a pasta (vamos chamá-lo
repo.git
) contém os dados reais do repositório
mv repo/.git repo.git; rm -rf repo
&&
vez de;
em caso demv
falha!Respostas:
Resumindo: substitua o conteúdo de
repo
pelo conteúdo derepo/.git
e diga ao repositório que agora é um repositório simples.Para fazer isso, execute os seguintes comandos:
Observe que isso é diferente de fazer um
git clone --bare
para um novo local (veja abaixo).fonte
core.bare
. Agora, depois de pesquisar essa opção no Google, posso confirmá-la: kernel.org/pub/software/scm/git-core/docs/git-config.htmlgit clone --bare /path/to/repo
).rm
comando pode precisar, em* \.[!.]*
vez de*
remover arquivos de ponto e diretórios de ponto.Seu método parece que funcionaria; a estrutura de arquivos de um repositório vazio é exatamente o que está dentro do diretório .git. Mas eu não sei se algum dos arquivos foi realmente alterado. Se isso falhar, você pode simplesmente
Você provavelmente precisará fazer isso em um diretório diferente para evitar um conflito de nome e, em seguida, basta movê-lo de volta para onde quiser. E pode ser necessário alterar o arquivo de configuração para apontar para onde estiver o repositório de origem.
fonte
git clone --bare /path/to/repo.git /path/to/newbarerepo.git
git update-server-info
o repo bare após a criação.Eu acho que o seguinte link seria útil
GitFaq: Como faço para deixar nu o repositório não nu existente?
fonte
git clone
) apresenta as desvantagens mencionadas nosatalian acima.A menos que você deseje ou precise especificamente modificar os bits do sistema de arquivos, é realmente muito simples criar uma versão simples de um repositório não básico (mencionado em vários outros posts aqui). Faz parte da funcionalidade principal do git:
git clone --bare existing_repo_path bare_repo_path
fonte
Por favor, considere também usar
A partir da documentação :
fonte
clone
). Estou esquecendo de algo? Foi--mirror
uma adição relativamente recente?--mirror
está disponível na versão 1.7, por isso já é bastante longo. Você pode conferir aquiEu só queria enviar para um repositório em um caminho de rede, mas o git não me deixaria fazer isso, a menos que esse repositório fosse marcado como vazio. Tudo que eu precisava era mudar sua configuração:
Não é necessário mexer nos arquivos, a menos que você queira mantê-lo limpo.
fonte
Eu li as respostas e fiz isso:
isso vai deixar o conteúdo de
repos/.git
como o nurepos.git
fonte
Aqui está o que eu acho mais seguro e simples. Não há nada aqui não mencionado acima. Eu só quero ver uma resposta que mostre um procedimento passo a passo seguro. Você inicia uma pasta a partir do repositório (repositório) que deseja exibir. Adotei a convenção implícita acima de que as pastas de repositório vazio têm uma extensão .git.
fonte
Basta ler
Pro Git Book: 4.2 Git no servidor - Obtendo o Git em um servidor
que se resumem a
Em seguida, coloque my_project.git no servidor
Qual é principalmente, qual resposta # 42 tentou apontar. Shuring alguém poderia reinventar a roda ;-)
fonte
Aqui está uma pequena função BASH que você pode adicionar ao seu .bashrc ou .profile em um sistema baseado em UNIX. Uma vez adicionado, o shell é reiniciado ou o arquivo é recarregado por meio de uma chamada para
source ~/.profile
ousource ~/.bashrc
.Uma vez chamado dentro de um diretório que contém um diretório .git, ele fará as alterações apropriadas para converter o repositório. Se não houver um diretório .git presente quando chamado, uma mensagem FAILURE aparecerá e nenhuma alteração no sistema de arquivos ocorrerá.
fonte
Os métodos que dizem para remover arquivos e mexer com a movimentação do diretório .git não são limpos e não usam o método "git" para fazer algo que deve ser simples. Este é o método mais limpo que encontrei para converter um repositório normal em um repositório simples.
Primeiro clone / caminho / para / normal / repo em um repo bare chamado repo.git
Em seguida, remova a origem que aponta para / path / to / normal / repo
Finalmente, você pode remover seu repo original. Você pode renomear repo.git para repo nesse ponto, mas a convenção padrão para significar um repositório git é algo.git, então eu pessoalmente deixaria assim.
Depois de fazer tudo isso, você pode clonar seu novo repo bare (que na verdade cria um repo normal e também é como você o converteria de nu para normal)
Obviamente, se você tiver outros fluxos upstream, anote-os e atualize seu repositório simples para incluí-lo. Mas, novamente, tudo pode ser feito com o comando git. Lembre-se de que as páginas de manual são suas amigas.
fonte
.git
pasta. É altamente educativo aprender como as peças se encaixam.Caso você tenha um repositório com poucas filiais de check-out local / refs / heads / * e poucas filiais remotas de controle remoto / origem / * E se desejar converter isso em um repositório BARE com todas as filiais em / refs / heads / *
você pode fazer o seguinte para salvar o histórico.
fonte
Usei o script a seguir para ler um arquivo de texto que possui uma lista de todos os meus repositórios SVN e convertê-los em GIT, e mais tarde usei o git clone --bare para converter em um repositório simples do git
list.txt tem o formato
e users.txt tem o formato
www-data é o usuário do servidor web Apache, é necessária permissão para enviar alterações por HTTP
fonte
Aqui está a definição de um repositório vazio do gitglossary :
Cheguei aqui porque estava brincando com um "repositório local" e queria poder fazer o que quisesse como se fosse um repositório remoto. Eu estava apenas brincando, tentando aprender sobre o git. Assumirei que esta é a situação para quem quiser ler esta resposta.
Eu adoraria para peritagem ou alguns contra-exemplos específicos, no entanto, parece que (depois de vasculhar algum código fonte git que eu encontrei) simplesmente indo para o arquivo
.git/config
e definindo o núcleo atributo desnudar a verdade , git vai deixar você fazer o que você deseja fazer no repositório remotamente. Ou seja, as seguintes linhas devem existir em.git/config
:(Isso é aproximadamente o que o comando
git config --bool core.bare true
fará, o que provavelmente é recomendado para lidar com situações mais complicadas)Minha justificativa para essa afirmação é que, no código-fonte git, parece haver duas maneiras diferentes de testar se um repositório está vazio ou não. Uma é verificar uma variável global
is_bare_repository_cfg
. Isso é definido durante alguma fase de instalação da execução e reflete o valor encontrado no.git/config
arquivo. O outro é uma funçãois_bare_repository()
. Aqui está a definição desta função:Eu não tenho o tempo nem experiência para dizer isso com absoluta confiança, mas, tanto quanto eu poderia dizer se você tem o
bare
conjunto de atributos paratrue
nos.git/config
, este deve sempre retornar1
. O restante da função provavelmente é para a seguinte situação:Vou experimentar com isso quando puder mais tarde, mas isso parece indicar que a configuração core.bare = true é equivalente a remover core.bare do arquivo de configuração e configurar os diretórios corretamente.
De qualquer forma, definir core.bare = true certamente permitirá que você faça isso, mas não tenho certeza se a presença de arquivos de projeto fará com que algumas outras operações dêem errado. É interessante e suponho instrutivo ir ao repositório e ver o que aconteceu localmente (ou seja, executar
git status
e entender os resultados).fonte
Primeiro,
backup
seu repo existente:Segundo, execute o seguinte:
fonte
Oneliner para executar todas as operações acima:
(não me culpe se algo explodir e você não tiver backups: P)
fonte
Uau, é simplesmente incrível quantas pessoas concordaram com isso, especialmente considerando que não parece que ninguém parou para perguntar por que essa pessoa está fazendo o que está fazendo.
A ÚNICA diferença entre um repositório bare e não nu é que a versão não nua possui uma cópia de trabalho. A principal razão pela qual você precisaria de um repositório simples é que, se você quisesse disponibilizá-lo para terceiros, não poderá trabalhar diretamente nele, então, em algum momento, será necessário cloná-lo. de volta para uma versão regular da cópia de trabalho.
Dito isto, para converter em um repositório simples, tudo o que você precisa fazer é garantir que você não tenha confirmações pendentes e apenas:
Lá vai você, repositório vazio.
fonte
git config core.bare true
também.git config core.bare true
, como nesta resposta .