Alguns dos melhores recursos do git
(ferramenta de gerenciamento de código-fonte) nem sempre são encontrados facilmente até que você os veja. Freqüentemente, é fácil usar um programa sem utilizar totalmente seu poder e você só saberá o que perdeu muito mais tarde. Poucas ferramentas são tão essenciais quanto as ferramentas de controle de versão e, como tal, sendo integrado pelo próprio Sr. Linux (s), git é uma força incrível a ser considerada: perder os recursos poderosos que ele possui pode se tornar uma verdadeira desvantagem.
Organizando seu fluxo de trabalho
Em primeiro lugar nesta coleção de dicas sobre git, deve ser a alteração para um [ modelo de ramificação de ramificação bem-sucedido . Você pode encontrar a ferramenta gitflow no Github e ser avisado de que, para usuários zsh, existe um https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git-flow/git-flow. plugin.zsh disponível para um rápido e fácil:
$ git-flow init
O acima irá inicializar um novo repositório git no diretório de trabalho atual com um modelo padronizado para branches. Leia mais no artigo escrito por Vincent Driessen (nvie) que escreveu a ferramenta.
Adicionar suporte upstream
Nada é mais desperdiçado do que um tempo precioso que alguém poderia ter gasto em codificação, para gastá-lo na depuração de código. Embora definitivamente educacional de uma certa perspectiva de domínio de novas tecnologias, também pode se tornar rapidamente uma dor de decifrar fluxos de pilhas de exceções e despejos (de memória), tentando primeiro localizar a fonte do erro (se alguma saída for remotamente útil para humanos ) e a seguir tentando consertá-lo. Isso geralmente envolve uma compreensão mais profunda do funcionamento interno de um determinado programa / biblioteca com o qual você pode não estar familiarizado e, como tal, não pode supervisionar totalmente as consequências de tais ações executadas na parte local do código que você (tente corrigir). O programa pode se recusar a executar ou pior, erros de regressão e exceções que acontecem em condições raras, aqueles casos especiais especiais e, muitas vezes, riscos de segurança envolvidos, são impossíveis de supervisionar com antecedência. Ou pode haver uma direção futura para a qual o projeto está evoluindo e que você precisa considerar ou antecipar. Ou apenas considere o fato de que ‘testar’ e ‘integrar’ pode ser extremamente difícil e demorado para ser honesto, quem gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E então há o tipo de pessoa que acha prazer em alimentar programas com expressões complexas de (meta) caracteres (leia os símbolos, eu acho) tentando hackear ou quebrá-lo. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: entender a codificação de caracteres e executar expressões regulares). Ou pode haver uma direção futura para a qual o projeto está evoluindo e que você precisa considerar ou antecipar. Ou apenas considere o fato de que ‘testar’ e ‘integrar’ pode ser extremamente difícil e demorado para ser honesto, quem gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E então há o tipo de pessoa que acha prazer em alimentar programas com expressões complexas de (meta) caracteres (leia os símbolos, eu acho) tentando hackear ou quebrá-lo. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: entender a codificação de caracteres e executar expressões regulares). Ou pode haver uma direção futura para a qual o projeto está evoluindo e que você precisa considerar ou antecipar. Ou apenas considere o fato de que ‘testar’ e ‘integrar’ pode ser extremamente difícil e demorado para ser honesto, quem gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E então há o tipo de pessoa que acha prazer em alimentar programas com expressões complexas de (meta) caracteres (leia os símbolos, eu acho) tentando hackear ou quebrá-lo. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: compreender a codificação de caracteres e executar expressões regulares). integrar ‘pode ser extremamente difícil e demorado para ser honesto, quem gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E há o tipo de pessoa que encontra alegria em alimentar programa expressões complexas de (meta) caracteres (leia os símbolos, eu acho) tentando hackear ou quebrá-lo. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: compreender a codificação de caracteres e executar expressões regulares). integrar ‘pode ser extremamente difícil e demorado para ser honesto, quem gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E há o tipo de pessoa que encontra alegria em alimentar programa expressões complexas de (meta) caracteres (leia os símbolos, eu acho) tentando hackear ou quebrá-lo. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: compreender a codificação de caracteres e executar expressões regulares). que gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E há o tipo de pessoa que acha prazer em alimentar programas com expressões complexas de (meta) caracteres (leia os símbolos, eu acho ) tentando hackear ou crackear. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: compreender a codificação de caracteres e executar expressões regulares). que gosta de testar totalmente todos os aspectos de entrada e saída de cada programa (módulo) que você gosta de usar? E há o tipo de pessoa que acha prazer em alimentar programas com expressões complexas de (meta) caracteres (leia os símbolos, eu acho ) tentando hackear ou crackear. Para a maioria de nós, a expressão regular e a codificação de sequências complexas de código não são a grande alegria da vida (embora uma das coisas mais valiosas a dominar: compreender a codificação de caracteres e executar expressões regulares).
Então, por que passar por tantos problemas? Claro, você já tomou a decisão fundamentada de incluir um determinado projeto, por que mantê-lo sozinho? Mas simplesmente incluir scripts de fornecedores, digamos, jQuery
não é o suficiente para você, porque você precisará modificar esse código para trabalhar com sua configuração. Ferramentas como jQuery são, portanto, muito genéricastrabalhar com a maior diversidade de sistemas, plataformas, ambientes (como um navegador no caso do jQuery) e tentar dar suporte a todo o espectro de casos de uso que as pessoas encontraram ao longo do tempo. Uma reclamação frequente é que muitas dessas ferramentas estão “inchadas”. Portanto, você pode querer usar apenas uma determinada parte de uma ferramenta que, se não for construída de uma forma muito modular (por exemplo, usar muitos plug-ins), também pode se tornar um verdadeiro problema para desvendar.
Algumas dessas complexidades, não todas, são facilmente resolvidas pelo git. O que você deve fazer é bifurcar um repositório no Github (em seu navegador) se quiser isso em seu projeto.
Depois de clonar esse repositório, em seu terminal, você faz uma cópia local, como uma cópia autônoma recém-clonada (pull) de seu projeto
$ git clone git@github.com/myuser/myforkedproject.git
ou como parte de um ‘superprojeto’ (mais sobre isso mais tarde), utilizando submódulos git , digamos muito como
$ git submodule add git@github.com/myuser/myforkedproject.git modules/git/myfork
$ git submodule update --init
Vale ressaltar que o segundo comando, equivalente a executar git submodule init
e git submodule update
, só então criará de fato a cópia local do projeto. Portanto, apenas adicionar o submódulo (primeira linha) fará com que pareça que você tem uma pasta local com tudo nela, mas você não pode usá-la sem primeiro inicializá-la e depois atualizá-la.
Em seguida, adicionamos suporte upstream para este nosso projeto, alterando o diretório atual para o de sua nova cópia (brincou um pouco com o nome para distinguir que é possível configurar como parece adequado):
$ cd modules/git/myfork
$ git remote add upstream https://github.com/originaluser/origproject.git
Agora que nosso projeto sabe onde o projeto ‘upstream’ pode ser encontrado, podemos ter quaisquer alterações feitas nesses arquivos de origem por dozes, senão centenas, de diferentes desenvolvedores ao redor do mundo, e fazer com que todos trabalhem para você ! Reserve um momento para comemorar com alegria esse fato 🙂
Mas espere! Ainda não terminamos totalmente. Uma etapa final é incluir uma linha em seu perfil git, localizada mais ou menos por convenção em e aplicar à seção a linha:~/.gitconfig
[alias]
pu = !"git fetch origin -v; git fetch upstream -v; git merge upstream/master"
Portanto, de agora em diante – em qualquer projeto – você adiciona upstream remoto ao, pode digitar:
$ git pu
E ele irá primeiro puxar de sua bifurcação remota, em seguida do repositório upstream original e, finalmente, mesclar quaisquer alterações que estejam no ‘delta’ daquelas (diff ou diferença).
Se a fusão falhar, você precisará resolver esses conflitos. Se isso acontecer, verifique este excelente tópico em stackoverflow.com . Eu sempre uso:
$ git mergetool -y
Que abre a três vias ferramenta de mesclagem fusão no meu sistema. Você também pode usar o sempre ótimo vim, que tem a ferramenta vimdiff
disponível por padrão.
Mais na segunda parte, já que estou ficando sem tempo aqui e essa dica ficou um pouco mais longa do que o planejado.