Contents
Migração dos repositórios Subversion Mageia (e Mandriva) para git
Note que isso NÃO inclui a migração de pacotes VCS para o git (embora isso também esteja em andamento - e felizmente é muito mais programável por scripts).
O trabalho já está bem encaminhado. Várias árvores do subversion já foram convertidas e estão linkadas abaixo. Se você está vindo aqui depois de ser referenciado a ele ao tentar se comprometer com o subversion, então há algumas dicas abaixo.
Usando Git
O Git é similar ao Subversion em vários aspectos, mas é muito mais poderoso e tem fluxos de trabalho muito mais avançados para facilitar o trabalho offline. Existem muitos guias por aí para usar o git, então não faz muito sentido listar instruções genéricas aqui, mas aqui estão algumas recomendações.
- Use seu endereço de e-mail @mageia.org se puder. Isso não é obrigatório, mas é legal manter o perfil da Mageia representado nos commits. Também encorajamos usar seu endereço @mageia.org para contribuições upstream.
- Adicione as seguintes linhas ao seu arquivo ~/.gitconfig para permitir clonagem/envio fácil por meio de comandos semelhantes a "git clone mga:software/rpm/urpmi" (ou seja, omitindo a parte longa dos URLs):
[url "git://git.mageia.org/"] insteadof = mga: [url "ssh://git@git.mageia.org/"] pushInsteadof = mga:
Processo de migração
- Repositórios SVN "soft" do Mandriva convertidos para git via git-svn com tradução adequada do nome do autor.
- Um script para importar repositórios Mageia SVN foi escrito. Este script:
- Pega o repositório git-svn inicial do Mandriva e o redefine para nosso ponto de ramificação.
- Pega o repositório SVN da Mageia e sintetiza um commit para alinhar as duas árvores.
- Hacks git-svn metadados
- Convence o git-svn a continuar e importar o Mageia SVN até os dias atuais com a tradução adequada do nome do autor.
- Converte tags em tags anotadas apropriadamente
- Grava SQL para monitorar a revisão do SVN -> git SHA1 para cada software para uso futuro.
Autenticação Git
A autenticação é manipulada pelo gitolite para permitir permissões de granularidade fina. Este trabalho foi feito por Nicolas Vigier (boklm).
O acesso push a cada repositório git é determinado, em última análise, por meio de associações de grupo LDAP. A ferramenta mgagit com o comando mgagit glrun) e grava os membros do grupo em arquivos em /var/lib/git/.gitolite/conf/ no formato gitolite, juntamente com ACLs para cada repositório. O acesso de gravação do repositório é definido pela hierarquia de repositório de nível superior ( artwork/ , qa/ , software/ , etc.) e é criado a partir de modelos especificados em https://gitweb.mageia.org/infrastructure/puppet/tree/deployment/mgagit/manifests/init.pp Normalmente, isso consiste nos membros do grupo LDAP %mga-X, onde X é essa hierarquia de nível superior ( %mga-artwork , %mga-qa , etc.) e o proprietário individual do repositório git. Esse proprietário é especificado em um arquivo em um dos meta-repositórios em infrastructure/repositories/ que define todos os repositórios git.
Como o gitolite não acessa o LDAP diretamente, mas usa as informações de associação de grupo em cache escritas pelo mgagit, elas podem ficar desatualizadas. Sempre que qualquer commit é enviado para qualquer repositório infrastructure/repositories/, um hook do git regenera automaticamente os arquivos de associação de grupo LDAP para o gitolite. Esses repositórios são atualizados muito raramente, então se você espera ter acesso push a um repositório, mas não tem, e [https://people.mageia.org/u/ você está no grupo LDAP correto, peça a um administrador de sistema para regenerar os arquivos do gitolite.
Layout do Git
O layout do subversion está um pouco "empurrado para baixo" no momento. Algum pensamento e cuidado serão colocados para garantir que o layout do git seja sensato.
Em termos gerais, dividiremos os repositórios em áreas principais de nível superior. Atualmente, "Software" e "Web", mas outros serão adicionados no devido tempo. Para cada nível superior, há um repositório Git que realmente define os repositórios git dentro deles. Clonar esse repositório e adicionar um arquivo *.repo apropriado criará esse repositório git automaticamente no push.