詳細検索

É OPS, mas tentei usar o git ~ Parte 1

Avatar
por komi

É OPS, mas tentei usar o git ~ Parte 1
Traduzido do 日本語 • Ver original

Olá. Aqui é o Komiya. É OPS, mas já tentei usar git ~ Parte 1, então sou iniciante no github, gitlab e git, então vou anotar para não esquecer. Desta vez, vou fazer até empurrar de forma travada. Se você cortar branch, vai ficar cheio se escrever desde a primeira vez. Talvez até a parte 2. A parte 2 é sobre branch, tag e confrict.

Contexto e Vantagens e Desvantagens

・Contexto Devido à recente integração contínua, houve demanda por construção de servidores no chef, e tive a oportunidade de encontrar um ponto perdido, então decidi usar o git porque precisava controlar a versão do repositório. No começo, eu o armazenava na versão empresarial do github da empresa, mas devido à demanda por comunicação via VPN, decidi introduzir o gitlab. ・Vantagens do git Você não precisa seguir o histórico. Visualização. A diferença no arquivo é fácil de ver, então é fácil verificar no navegador ・Desvantagens do git Meus colegas não começam a usá-lo (se você não precisa, tende a ficar ocupado e vai passando) Bem, entendo como você se sente. Também me senti meio forçado.

Diferença entre github e gitlab Não acho que haja muita diferença em termos de comandos git, mas seria interessante ver se o sistema pode ser aberto (enterprise pode ser fechado) ou fechado, e no caso do gilab, o limite de capacidade também pode ser definido em detalhes dependendo do ambiente, como espaço em disco. Você terá a liberdade de evitar passar por uma VPN. Essa é a diferença entre usar um serviço web compartilhado ou construir o seu próprio. Parece que o tempo e esforço para introduzir o gilab foi recentemente reduzido por ter receitas que podem ser facilmente inseridas no Chef.

Para o GitHub, faça algo sobre autenticação em dois fatores

 Não vou entrar em detalhes, mas primeiro registre-se no github e gerencie a autenticação de dois fatores da empresa no github → Siga o manual preparado pela empresa. Resumindo, é como a autenticação em dois fatores do Gmail, e é um mecanismo para autenticar quando você recebe uma notificação de SMS no seu celular.

 Crie uma chave SSH no host ao qual você quer se conectar e registre a chave pública criada no seu perfil de usuário do GitHub.

Inicialize o git no host que você quer fazer push

Primeiro, registre as informações do usuário da pessoa que digitou o comando git.

git config --global user.email "komiyay@xxxxx"'
git config --global user.name "Yxxx Komiya" 

Se você não especificar o limite de memória ou o número de threads no arquivo de configuração, receberá um erro OutOfMemory.

$ vi ~/.gitconfig
[usuário]
        Email = komiyay@xxxxx
        nome = Yxxx Komiya
[núcleo]
        TamanhoJanela empacotado = 128m
        LimitGitEmpacotado = 128m
[matilha]
        windowMemory = 128m
        threads = 2
        deltaCacheTamanho = 128m
        LimiteTamanhoDo Pacote = 128m

*Configurei essa configuração para cerca de m1.small. T1.micro apareceu um erro de memória.

Mensagem de erro de memória:

fatal: Sem memória, malloc falhou 9,59 MiB | 4,16 MiB/s
Erro: Pack-objetos morreram com erro estranho
Registrar um repositório git e fazer push com adicionar e commit

Executarei o comando conforme descrito na descrição do repositório no lado do github que você criou. *Não recebi permissão para criar um repositório (porque é um repositório privado da empresa) Após migrar para o repositório do chef que você deseja registrar, execute o seguinte.

toque README.md
git init
Git Add README.md
git commit -m "primeiro commit" 
git remote add origin git@github.com:Isaoxxxx/xxx-chefrepo.git
git push -u mestre de origem

Adicione o Git Remote e você verá algo assim:

$ git remote -v
Origem git@github.com:Isaoxxxx/xxx-Chefrepo.git (buscar)
Origem git@github.com:Isaoxxxx/xxx-chefrepo.git (push)
git push falhou

O motivo é que eu acidentalmente comprometi um arquivo grande de 100MB ou mais. (No caso do github. O gitlab não tem limite específico) Se não for mais que 100MB, parece que arquivos middleware são relativamente inúteis. Parece que você precisa usar recursos remotos _file ou baixá-los depois do clone do git.

$ git push -u mestre de origem
Aviso: Adicionada permanentemente a chave de host RSA para o endereço IP '192.30.252.128' à lista de hosts conhecidos. 
Contagem de objetos: 557, pronto. 
Compressão delta usando até 2 threads. 
Compressão de objetos: 100% (451/451), feito. 
Escrivendo objetos: 100% (557/557), 587,22 MiB | 11,26 MiB/s, pronto. 
Total 557 (delta 126), reutilizado 0 (delta 0)
remoto: erro: GH001: Arquivos grandes detectados. 
remoto: erro: Rastreio: 5f467e50268ce9aec1f53188e8e52882
Remote: Erro: Veja http://git.io/iEPt8g para mais informações. 
remote: erro: O arquivo site-cookbooks/java/files/default/usr/local/src/jdk-7u45-linux-x64.rpm é de 116,91 MB; isso ultrapassa o limite de tamanho de arquivo do GitHub de 100 MB
remote: erro: Site do arquivo-cookbooks/mysqld/files/default/usr/local/src/MySQL-5.6.15-1.linux_glibc2.5.x86_64.rpm-bundle.tar é de 294,62 MB; isso ultrapassa o limite de tamanho de arquivo do GitHub de 100 MB
remote: erro: O arquivo site-cookbooks/play/files/default/usr/local/src/play-2.2.1.zip é de 104,82 MB; isso excede o limite de tamanho de arquivo do GitHub de 100 MB
Para git@github.com:Isaoxxxx/xxx-chefrepo.git
 ! [rejeitado remoto] master -> master (gancho pré-recebimento recusado)
erro: não conseguiu enviar algumas referências para 'git@github.com:Isaoxxxx/xxx-Chefrepo.git' 

URL na mensagem de erro ↓ Inglês. Trabalhando com arquivos grandes · Ajuda no GitHub Não bastava apenas 'git rm' e 'git commit'. Como mostrado na URL abaixo, operações especiais eram necessárias. Quando você faz commit em um arquivo acima de 100MB e o GitHub rejeita o push

$ git filter-branch --force --index-filter 
  'git rm ---cacheado --ignorar-desfazer site-cookbooks/play/files/default/usr/local/src/play-2.2.1.zip'  
  --poda-vazio --tag-nome-filtro cat -- --todos

$ git filter-branch --force --index-filter 
  'git rm ---cached --ignore-unmatch site-cookbooks/java/files/default/usr/local/src/jdk-7u45-linux-x64.rpm'  
  --poda-vazio --tag-nome-filtro cat -- --todos

$ git filter-branch --force --index-filter 
  'git rm ---cached --ignore-unmatch site-cookbooks/mysqld/files/default/usr/local/src/MySQL-5.6.15-1.linux_glibc2.5.x86_64.rpm-bundle.tar'  
  --poda-vazio --tag-nome-filtro cat -- --todos

$ git commit --amend -CHEAD

Recuperei a compostura e forcei, e foi um sucesso.

$ git push -u mestre de origem
Contando objetos: 533, pronto. 
Compressão delta usando até 2 threads. 
Compressão de objetos: 100% (439/439), concluído. 
Objetos de escrita: 100% (533/533), 79,03 MiB | 5,44 MiB/s, pronto. 
Total 533 (delta 119), reutilizado 0 (delta 0)
Para git@github.com:Isaoxxxx/xxx-chefrepo.git
 * [novo ramo] mestre -> mestre
O chefe de filial configurado para rastrear o mestre de ramo remoto desde a origem. 

Quando chequei o Github, o registro foi bem-sucedido.

Resposta ao upload de arquivos que não deveriam ser enviados

Quando verifiquei, acidentalmente enviei dados_bag_key também, então deletei no github. Editei no navegador, então dessa vez recebi um erro que não conseguia empurrar a menos que o mesclame. Parece que está competindo.

$ git push -u mestre de origem
Para git@github.com:Isaoxxxx/xxx-chefrepo.git
 ! [rejeitado] master -> master (não avançar rápido)
erro: não conseguiu enviar algumas referências para 'git@github.com:Isaoxxxx/xxx-Chefrepo.git' 
Para evitar que você perca o histórico, atualizações que não avançavam rápido eram rejeitadas
Faça a mestura das alterações remotas antes de empurrar novamente. Veja a 'Nota sobre
A seção 'Git Push --Help' do 'Fast Forwards' para mais detalhes. 

Como fazer uma fusão? Então, depois de uma pequena pesquisa, pareceu que seria melhor buscar, puxar e empurrar por enquanto. Parece que puxar é o equivalente a buscar + mesclar internamente.

Quando fiz o git pull nesse estado, o arquivo local desapareceu como esperado. Em primeiro lugar, essa chave é apenas um arquivo de backup copiado e está registrado no .gitignore, então copiei de volta

$ cp -p .. /.chef/encrypted_data_bag_secret ./data_bag_key
$ cat .gitignore
/livros de receitas/ 
data_bag_key

Mesmo que eu tentasse '$ git status', não havia arquivo de atualização. Então, quando verifiquei no navegador com 'git push', o '.gitignore' atualizado estava atualizado, e não consegui encontrar o 'data_bag_key' que deletei e adicionei ao '.gitignore', então parece que estava como esperado.

Quando você envia um arquivo que não deveria ser enviado, em vez de deletar do navegador, pode fazer isso com um comando, e eu usei como referência quando acidentalmente adicionei um arquivo que não deveria ser publicado no git.

git filter-branch --index-filter 'git update --index --remove "filename" ' HEAD
commit git -a
vai embora... 

Parece que é melhor fazer assim.

Conclusão

Depois que você atualiza seu repositório local, pode usar o

git add
git commit -m "histórico" 
Git Push

Se você atualizar em um repositório remoto

Git Fetch
git pull

Adicione arquivos que você não quer compartilhar no seu repositório local em '.gitignore'. Se você deletar o arquivo inteiro após 'adicionar' no seu repositório local e antes de 'commit', pode usar o

Nome de arquivo git RM

Se você deletar apenas o índice após adicionar o repositório local e antes de fazer o commit,

git reset HEAD -- <file>

A busca reversa também foi útil. Operações Básicas | Pesquisa Reversa Git | Introdução ao Git que até macacos conseguem entender - Vamos dominar o controle de versões - Como chef, parece necessário escrever um README corretamente para torná-lo mais fácil de usar novamente.

Atualmente, uso principalmente o gitlab por causa disso. Não gosto muito do closed it.

Obrigado por ler. Aqui está o seguinte.

Related Articles