git
é como o UNIX. Fácil de usar, mas exigente com seus amigos. É tão poderoso e amigável quanto um pipeline de shell.
Dito isto, depois de entender seus paradigmas e conceitos, ele tem a mesma clareza que eu esperava das ferramentas de linha de comando do UNIX. Você deve tirar um tempo para ler um dos muitos bons tutoriais do git disponíveis on-line. O livro Pro Git é um bom lugar para começar.
Para responder sua primeira pergunta.
O que é git remote add ...
Como você provavelmente sabe, git
é um sistema de controle de versão distribuído. A maioria das operações é feita localmente. Para se comunicar com o mundo exterior, git
usa o que é chamado remotes
. Estes são repositórios diferentes do disco local em que você pode push
alterar (para que outras pessoas possam vê-lo) ou pull
de (para que você possa obter outras alterações). O comando git remote add origin [email protected]:peter/first_app.git
cria um novo controle remoto chamado origin
localizado em [email protected]:peter/first_app.git
. Depois de fazer isso, em seus comandos push, você pode pressionar para, em origin
vez de digitar o URL inteiro.
O que é git push origin master
Este é um comando que diz "envie as confirmações na ramificação local nomeada master
para o controle remoto nomeado origin
". Uma vez executado, todas as coisas que você sincronizou pela última vez com a origem serão enviadas para o repositório remoto e outras pessoas poderão vê-las lá.
Agora, sobre transportes (ou seja, o que git://
) significa. URLs de repositório remoto podem ser de vários tipos ( file://
, https://
etc.). O Git simplesmente depende do mecanismo de autenticação fornecido pelo transporte para cuidar de permissões e outras coisas. Isso significa que, para file://
URLs, haverá permissões de arquivo UNIX, etc. O git://
esquema está solicitando ao git que use seu próprio protocolo de transporte interno, otimizado para o envio de conjuntos de alterações do git. Quanto ao URL exato, é assim porque o github configurou seu git
servidor.
Agora a verbosidade. O comando que você digitou é o geral. É possível dizer ao git algo como "o ramo chamado master
aqui é o espelho local do ramo chamado foo
no controle remoto chamado bar
". No git speak, isso significa que master
acompanha bar/foo
. Quando você clona pela primeira vez, recebe uma ramificação chamada master
e uma remota chamada origin
(de onde clonou) com o mestre local configurado para rastrear o mestre na origem. Uma vez que isso esteja configurado, você pode simplesmente dizer git push
e fará. O comando mais longo está disponível no caso de você precisar (por exemplo, git push
pode enviar por push para o repositório público oficial e git push review master
pode ser usado para enviar para um controle remoto separado que sua equipe usa para revisar o código). Você pode definir sua ramificação para ser uma ramificação de rastreamento usando o--set-upstream
opção do git branch
comando.
Eu senti que o git (diferente da maioria dos outros aplicativos que usei) é melhor compreendido de dentro para fora. Depois de entender como os dados são armazenados e mantidos dentro do repositório, os comandos e o que eles fazem ficam claros. Eu concordo com você que há algum elitismo entre muitos git
usuários, mas também descobri isso com os usuários do UNIX uma vez, e valeu a pena passar por eles para aprender o sistema. Boa sorte!
[email protected]:peter/first_app.git
é ascp
sintaxe de estilo para URLs ssh no git. Outro ponto é que, por padrão, a configuração upstream demaster
não afeta o comportamento de, agit push
menos que você tenhapush.default
definido comotracking
(ouupstream
em versões posteriores) - fiz um post sobre esta fonte de confusão: longair.net/blog/2011 /push.default
a configuração upstream seria usada para encontrar o controle remoto padrão quando você usargit push
, mas não afetaria o mapeamento das referências.Atualização: observe que a resposta atualmente aceita perpetua um mal-entendido comum sobre o comportamento de
git push
, que não foi corrigido apesar de um comentário apontar.Seu resumo do que são controles remotos - como um apelido para a URL de um repositório - está correto.
Os dois URLs que você mencionou indicam que dois protocolos de transporte diferentes devem ser usados. O primeiro começa com
git://
o protocolo git, que geralmente é usado apenas para acesso somente leitura aos repositórios. A outra,,[email protected]:peter/first_app.git
é uma das diferentes maneiras de especificar o acesso a um repositório através do SSH - esta é a "sintaxe do estilo scp" descrita na documentação . O nome de usuário na sintaxe no estilo scp deve-segit
à maneira como o GitHub lida com a identificação de usuários - essencialmente esse nome de usuário é ignorado e o usuário é identificado com base no par de chaves SSH que eles usaram para autenticar.Quanto à verbosidade de
git push origin master
, você notou que após o primeiro empurrão, você pode simplesmente fazergit push
. Isso ocorre devido a uma série de padrões difíceis de lembrar, mas geralmente úteis :)remote.master.url
no seu caso) será usado. Se isso não estiver configurado,origin
será usado.master
,master:my-experiment
etc.) especificado, o git usará como padrão o envio de todas as ramificações locais com o mesmo nome de ramificação no controle remoto. Se você apenas tem um ramo chamadomaster
em comum entre o repositório e o remoto, será o mesmo que enviar o seumaster
para o remotomaster
.Pessoalmente, como tenho muitas ramificações de tópicos (e muitas vezes vários controles remotos), sempre uso o formulário:
... para evitar empurrar acidentalmente outros galhos.
Em resposta a seus comentários sobre uma das outras respostas, parece-me que estão aprendendo sobre git de forma top-down de forma muito eficaz - você descobriu que os padrões de trabalho, e sua pergunta é perguntar sobre o porquê;) Para ser mais sério, o git podeser usado essencialmente tão simples quanto o SVN, mas conhecer um pouco sobre controles remotos e ramificações significa que você pode usá-lo com muito mais flexibilidade e isso pode realmente mudar a maneira como você trabalha para melhor. Sua observação sobre um curso semestral me faz pensar em algo que Scott Chacon disse em uma entrevista em podcast - os alunos são ensinados sobre todos os tipos de ferramentas básicas em ciência da computação e engenharia de software, mas raramente em controle de versão. Agora, sistemas de controle de versão distribuídos, como git e Mercurial, são tão importantes e flexíveis que valeria a pena ministrar cursos sobre eles para dar às pessoas uma boa base.
Minha opinião é que
git
, com , essa curva de aprendizado vale a pena - trabalhar com várias ramificações de tópicos, mesclá-las facilmente e empurrá-las e puxá-las entre diferentes repositórios é extraordinariamente útil quando você se torna confiante com o sistema. É lamentável que:fonte
Dê uma olhada na sintaxe para adicionar um repositório remoto.
Exemplo:
Vamos dissecar o comando:
O git remote é usado para gerenciar seus servidores Central para hospedar seus repositórios git.
Pode ser que você esteja usando o Github para o seu material de repositório central. Vou dar um exemplo e explicar o comando git remote add origin
Suponha que eu esteja trabalhando com o GitHub e o BitBucket para os servidores centrais dos repositórios git e criei repositórios nos dois sites para o meu primeiro projeto de aplicativo .
Agora, se eu quiser enviar minhas alterações para esses dois servidores git, precisarei dizer ao git como alcançar esses repositórios centrais. Então eu vou ter que adicionar estes,
Para o GitHub
E para BitBucket
Eu usei duas variáveis (até onde é fácil chamá-las de variáveis) gh_origin (gh FOR GITHUB) e bb_origin (bb para BITBUCKET) apenas para explicar que podemos chamar de origem o que quisermos.
Agora, depois de fazer algumas alterações, terei que enviar (enviar por push) todas essas alterações para os repositórios centrais, para que outros usuários possam ver essas alterações. Então eu ligo
Enviando para o GitHub
Enviando para BitBucket
gh_origin está mantendo o valor de https://github.com/user/first-app-git.git e bb_origin está mantendo o valor de https: //[email protected]/user/first-app-git.git
como sempre que preciso enviar minhas alterações de código, preciso usar essas palavras em vez de lembrar ou digitar o URL para o mesmo.
Na maioria das vezes você não vê nada além de origem, pois na maioria das vezes você lida com apenas um repositório central como o Github ou o BitBucket, por exemplo.
fonte
O
.git
final do nome do repositório é apenas uma convenção. Normalmente, nos repositórios de servidores git são mantidos em diretórios nomeadosproject.git
. O cliente e o protocolo git respeitam esta convenção testandoproject.git
quando somenteproject
é especificado.git://[email protected]/peter/first_app.git
não é um URL git válido. Os repositórios git podem ser identificados e acessados através de vários esquemas de URL especificados aqui .[email protected]:peter/first_app.git
é ossh
URL mencionado nessa página.git
é flexível. Ele permite que você rastreie sua filial local em praticamente qualquer filial de qualquer repositório. Emboramaster
o rastreamento (sua filial padrão local)origin/master
(a filial padrão remota) seja uma situação popular, não é universal. Muitas vezes você pode não querer fazer isso. É por isso que o primeirogit push
é tão detalhado. Diz ao git o que fazer com amaster
ramificação local quando você faz umgit pull
ou umgit push
.O padrão para
git push
egit pull
é trabalhar com o controle remoto da filial atual. Este é um padrão melhor que o mestre de origem. A maneira como o git push determina isso é explicada aqui .git
é bastante elegante e compreensível, mas existe uma curva de aprendizado a ser percorrida.fonte
git push
não usa as variáveis de configuração definidasgit branch/checkout --track
para determinar para qual referência remota enviar. Você está certo de que o git pull os usa, no entanto.Origem remota de adição remota do Git:
Ele centraliza seu código-fonte para outros projetos. É desenvolvido com base no Linux, completa código-fonte aberto e torna seu código útil para outros usuários do git.
Empurra seu código para o repositório git usando o URL remoto do hub git.
fonte