Ok, depois de ver este post de PJ Hyett , decidi pular para o final e seguir com o Git .
Então, o que eu preciso é de um guia prático para iniciantes do Git. "Iniciante" sendo definido como alguém que sabe como lidar com seu compilador, entende em algum nível o que é um Makefile e tocou no controle de origem sem entendê-lo muito bem.
"Prático" sendo definido, pois essa pessoa não deseja obter muitos detalhes sobre o que o Git está fazendo em segundo plano e nem se importa (ou sabe) que ele é distribuído. Suas respostas podem sugerir as possibilidades, mas tente apontar para o iniciante que deseja manter um repositório 'principal' em um 'servidor' com backup e segurança, e tratar o repositório local como apenas um recurso 'cliente'.
Assim:
Instalação / Configuração
- Como instalar o Git
- Como você configura o Git? Tente cobrir o Linux, Windows, Mac e pense na mentalidade de 'cliente / servidor'.
- Como você cria um novo projeto / repositório?
- Como você o configura para ignorar arquivos (.obj, .user, etc) que não fazem realmente parte da base de código?
Trabalhando com o código
- Como você obtém o código mais recente?
- Como você verifica o código?
- Como você confirma alterações?
- Como você vê o que não foi confirmado ou o status da sua base de código atual?
- Como você destrói confirmações indesejadas?
- Como você compara duas revisões de um arquivo ou seu arquivo atual e uma revisão anterior?
- Como você vê o histórico de revisões em um arquivo?
- Como você lida com arquivos binários (documentos do Visio, por exemplo, ou ambientes de compilador)?
- Como você mescla arquivos alterados ao "mesmo tempo"?
- Como você desfaz (reverte ou redefine) uma confirmação?
Etiquetagem, ramificação, lançamentos, linhas de base
- Como você 'marca' 'marca' ou 'libera' um conjunto específico de revisões para um conjunto específico de arquivos, para que você possa fazer isso posteriormente mais tarde?
- Como você puxa um 'release' específico?
- Como você se ramifica?
- Como você mescla ramificações?
- Como você resolve conflitos e conclui a mesclagem?
- Como você mescla partes de um ramo em outro ramo?
- O que é rebasing?
- Como rastreio ramificações remotas?
- Como posso criar uma ramificação em um repositório remoto?
- Como faço para excluir uma ramificação em um repositório remoto?
- Exemplos de fluxo de trabalho Git
De outros
- Descreva e vincule a uma boa interface gráfica do usuário, plug-in IDE etc. que faça do Git um recurso que não seja da linha de comando, mas liste suas limitações e suas vantagens.
- msysgit - Plataforma cruzada, incluída no Git
- gitk - Visualizador de histórico de várias plataformas, incluído no Git
- gitnub - Mac OS X
- gitx - Visualizador de histórico do Mac OS X
- smartgit - Plataforma cruzada, comercial, beta
- tig - GUI do console para Linux
- qgit - GUI para Windows, Linux
- Extensões Git - pacote para Windows, inclui interface gráfica amigável
- Quaisquer outras tarefas comuns que um iniciante deve saber?
- Como trabalho efetivamente com um repositório do subversion definido como minha fonte de controle de origem?
Outras referências para iniciantes do Git
- Guia Git
- Livro Git
- Git magic
- gitcasts
- Guias do GitHub
- Tutorial do Git
- Progit - livro de Scott Chacon
- Git - Curso de Bater SVN
- Git de baixo para cima
- Pronto para Git
- gitref.org
- Cheatsheet visual do Git
Investigando o Git
Examinarei as entradas de vez em quando e as arrumo para que elas tenham uma aparência consistente e seja fácil escanear a lista - fique à vontade para seguir um simples "cabeçalho - breve explicação - lista de instruções - dicas e truques e modelo de informação extra ". Também vou vincular as entradas da lista de marcadores acima, para que seja fácil encontrá-las mais tarde.
fonte
rm -rf .git
eliminar o banco de dados do git.git status
para garantir que você esteja dentro de um repositório: isso tem um problema: se você tiver a variável de ambiente $ GIT_DIR definida no seu shell atual, o git ignorará sua localização atual e usará o repositório em $ GIT_DIR. Eu deveria saber, perdi uma hora para isso ontem.GUIs para git
GUI do Git
Incluído no git - Execute a
git gui
partir da linha de comando e o instalador do msysgit do Windows o adiciona ao menu Iniciar.A GUI do Git pode fazer a maioria do que você precisa fazer com o git. Incluindo mudanças de estágio, configurar git e repositórios, enviar alterações, criar / efetuar checkout / excluir ramificações, mesclar e muitas outras coisas.
Um dos meus recursos favoritos é o atalho "line line" e "stage hunk" no menu do botão direito do mouse, que permite confirmar partes específicas de um arquivo. Você pode conseguir o mesmo via
git add -i
, mas acho mais fácil de usar.Não é o aplicativo mais bonito, mas funciona em quase todas as plataformas (baseado no Tcl / Tk)
Screenshots | um screencast
GitK
Também incluído no git. É um visualizador de histórico do git e permite visualizar o histórico de um repositório (incluindo ramificações, quando elas são criadas e mescladas). Você pode visualizar e pesquisar confirmações.
Combina bem com o git-gui.
Gitnub
Aplicativo Mac OS X. Principalmente equivalente
git log
, mas possui alguma integração com o github (como a "Visualização de rede").Parece bonito e se encaixa no Mac OS X. Você pode pesquisar repositórios. A maior crítica do Gitnub é que ele mostra a história de maneira linear (um único ramo de cada vez) - ele não visualiza ramificações e mesclagens, o que pode ser importante com o git, embora essa seja uma melhoria planejada.
Links para download, registro de alterações e capturas de tela | repositório git
GitX
Pretende ser um "clone do gitk para OS X".
Ele pode visualizar o histórico de ramificações não lineares, executar confirmações, visualizar e pesquisar confirmações e possui alguns outros recursos interessantes, como "Quicklook" de qualquer arquivo em qualquer revisão (espaço de imprensa na exibição da lista de arquivos), exportar qualquer arquivo (via arrastar e soltar).
É muito melhor integrado ao OS X do que
git-gui
/gitk
e é rápido e estável, mesmo com repositórios excepcionalmente grandes.O pieter original do repositório git não foi atualizado recentemente (mais de um ano no momento da escrita). Uma ramificação com manutenção mais ativa está disponível no brotherbard / gitx - ele adiciona "barra lateral, busca, puxa, empurra, adiciona controle remoto, mescla, seleciona cereja, rebase, clona, clona para"
Download | Screenshots | repositório git | garfo irmãozinho | garfo de laullon
SmartGit
Na página inicial:
Você pode baixá-lo no site deles .
Baixar
TortoiseGit
Versão do TortoiseSVN Git para usuários do Windows.
Baixar
QGit
Baixar
gitg
Recursos
Download: releases ou fonte
Gitbox
Baixar
Gity
O site da Gity não tem muita informação, mas a partir das capturas de tela, parece ser um recurso rico em código aberto do OS X git gui.
Download ou fonte
Meld
Transferências
Katana
Uma GUI do Git para OSX de Steve Dekorte.
Grátis para 1 repositório, US $ 25 para mais.
Baixar
Sprout (anteriormente GitMac)
Concentra-se em tornar o Git fácil de usar. Apresenta uma interface de usuário nativa do Cocoa (semelhante a mac), navegação rápida no repositório, clonagem, push / pull, ramificação / fusão, visual diff, ramificações remotas, fácil acesso ao Terminal e muito mais.
Ao tornar as ações do Git mais usadas intuitivas e fáceis de executar, o Sprout (anteriormente GitMac) torna o Git fácil de usar. Compatível com a maioria dos fluxos de trabalho do Git, o Sprout é ótimo para designers e desenvolvedores, colaboração em equipe e usuários avançados e iniciantes.
Download | Local na rede Internet
Torre
Uma GUI Git rica em recursos para Mac OSX. Avaliação gratuita de 30 dias, US $ 59USD para uma licença de usuário único.
Download | Local na rede Internet
EGit
Download | Local na rede Internet
Extensões Git
Código aberto para Windows - instala tudo o que você precisa para trabalhar com o Git em um único pacote, fácil de usar.
Baixar
Muito obrigado ao dbr por elaborar o material do git gui.
SourceTree
O SourceTree é um cliente Mac gratuito para Git, Mercurial e SVN. Construído pela Atlassian, o pessoal por trás do BitBucket, parece funcionar igualmente bem com qualquer sistema de VC, o que permite que você domine uma única ferramenta para uso em todos os seus projetos, no entanto, eles são controlados por versão. Cheio de recursos e GRÁTIS.
Download | Local na rede Internet
fonte
Bem, apesar de você ter solicitado que não "simplesmente" vinculássemos a outros recursos, é uma tolice quando já existe um recurso de comunidade (e crescente) realmente bom: o Git Community Book . Sério, essas 20 perguntas em uma pergunta serão concisas e consistentes. O Git Community Book está disponível como HTML e PDF e responde a muitas de suas perguntas com respostas claras, bem formatadas e revisadas por pares e em um formato que permite que você pule diretamente para o seu problema em questão.
Infelizmente, se minha postagem realmente o incomoda, eu a excluirei. Apenas diga então.
fonte
Como configurá-lo para ignorar arquivos:
A capacidade de o git ignorar arquivos que você não deseja que ele rastreie é muito útil.
Para ignorar um arquivo ou conjunto de arquivos, você fornece um padrão. A sintaxe do padrão para o git é bastante simples, mas poderosa. É aplicável a todos os três arquivos diferentes que mencionarei abaixo.
Ótimo exemplo da página do manual gitignore (5) :
Geralmente, existem três maneiras diferentes de ignorar arquivos não rastreados.
1) Ignore para todos os usuários do repositório:
Adicione um arquivo chamado .gitignore à raiz da sua cópia de trabalho.
Edite .gitignore para corresponder às suas preferências para quais arquivos devem / não devem ser ignorados.
e comprometa-se quando terminar.
2) Ignore apenas sua cópia do repositório:
Adicione / edite o arquivo $ GIT_DIR / info / exclude em sua cópia de trabalho, com seus padrões preferidos.
Ex: minha cópia de trabalho é ~ / src / project1, então eu editaria ~ / src / project1 / .git / info / exclude
Você Terminou!
3) Ignore em todas as situações, no seu sistema:
Os padrões globais de ignorância para o seu sistema podem incluir um arquivo com o nome que você desejar.
O meu pessoalmente se chama ~ / .gitglobalignore
Posso então informar o git desse arquivo editando meu arquivo ~ / .gitconfig com a seguinte linha:
Você Terminou!
Acho que a página de manual gitignore é o melhor recurso para obter mais informações.
fonte
Como você 'codifica' um conjunto específico de revisões
Como você 'marca' 'marca' ou 'libera' um conjunto específico de revisões para um conjunto específico de arquivos, para que você possa fazer isso posteriormente mais tarde?
Usando o
git tag
comandoPara simplesmente "marcar" a revisão atual, basta executar ..
Para listar as tags atuais, basta executar
git tag
sem argumentos ou-l
(L minúsculo):Para excluir uma tag, use o
-d
sinalizador:Para marcar um commit (anterior) específico, basta fazer ..
Por exemplo:
Nota: por padrão, o git cria uma tag "leve" (basicamente uma referência a uma revisão específica). O caminho "certo" é usar a
-a
bandeira. Isso iniciará seu editor solicitando uma mensagem de marca (idêntico a pedir uma mensagem de confirmação, você também pode usar o-m
sinalizador para fornecer a mensagem de marca na linha de comando). O uso de uma tag anotada cria um objeto com seu próprio ID, data, etiquetador (autor) e, opcionalmente, uma assinatura GPG (usando a-s
tag). Para mais informações sobre isso, consulte este postE para listar as tags com anotações, use o
-n1
sinalizador para mostrar 1 linha de cada mensagem de tag (-n245
para mostrar as primeiras 245 linhas de cada anotação e assim por diante):Para mais informações, consulte a página de manual git-tag (1)
fonte
git tag tagname revision_SHA1
Exemplo de fluxo de trabalho com GIT.
O Git é extremamente flexível e se adapta bem a qualquer fluxo de trabalho, mas a não imposição de um fluxo de trabalho específico pode ter o efeito negativo de dificultar a compreensão do que você pode fazer com o git além do fluxo de trabalho linear de "backup" e como a ramificação útil pode ser .
Esta postagem do blog explica muito bem um fluxo de trabalho muito simples, mas eficaz, que é realmente fácil de configurar usando o git.
citando a postagem do blog: Consideramos origem / mestre como o principal ramo em que o código fonte do HEAD sempre reflete um estado pronto para produção:
O fluxo de trabalho tornou-se popular o suficiente para criar um projeto que implementa esse fluxo de trabalho: git-flow
Bela ilustração de um fluxo de trabalho simples, no qual você faz todas as alterações no desenvolvimento e só empurra para o mestre quando o código está em um estado de produção:
Agora, digamos que você queira trabalhar em um novo recurso ou na refatoração de um módulo. Você pode criar um novo ramo, o que poderíamos chamar de ramo "recurso", algo que levará algum tempo e poderá quebrar algum código. Depois que seu recurso estiver "suficientemente estável" e desejar movê-lo para "mais perto" da produção, você mesclará seu ramo de recursos em desenvolvimento. Quando todos os bugs são resolvidos após a mesclagem e seu código passa em todos os testes sólidos, você coloca suas alterações no master.
Durante todo esse processo, você encontra um terrível bug de segurança, que precisa ser corrigido imediatamente. Você pode ter um ramo chamado hotfixes, que faz alterações que são empurradas mais rapidamente para a produção do que o ramo "desenvolvimento" normal.
Aqui você tem uma ilustração de como esse fluxo de trabalho de recurso / hotfix / desenvolvimento / produção pode parecer (bem explicado na postagem do blog, e repito, a postagem do blog explica todo o processo com muito mais detalhes e muito melhor do que eu) .
fonte
Aqui está uma cópia do post de PJ Hyett, pois ele não está mais disponível:
fonte
./foo
mas não há um caminho especificado para o clone get, onde você está fazendo check-out?Como instalar o Git
No Windows:
Instale o msysgit
Existem vários downloads:
Isso também instala um shell bash do Cygwin, para que você possa usá-lo
git
em um shell mais agradável (que cmd.exe) e também inclui git-gui (acessível viagit gui
comando ouStart > All Programs > Git
menu)Mac OS X
Use o git-osx-installer , ou você também pode instalar a partir da fonte
Através de um gerenciador de pacotes
Instale
git
usando seu gerenciador de pacotes nativo. Por exemplo, no Debian (ou Ubuntu):Ou no Mac OS X, via MacPorts :
… Ou fink:
… Ou Homebrew :
Nas distribuições baseadas no Red Hat, como o Fedora:
No Cygwin, o pacote Git pode ser encontrado na seção "devel"
De origem (Mac OS X / Linux / BSD / etc.)
No Mac OS X, se você tiver as Ferramentas do Desenvolvedor instaladas, poderá compilar o Git a partir da fonte com muita facilidade. Baixar a última versão do Git como um
.tar.bz
ou.tar.gz
de http://git-scm.com/ , e extraí-lo (clique duas vezes no Finder)No Linux / BSD / etc. deve ser o mesmo. Por exemplo, no Debian (e Ubuntu), você precisa instalar o
build-essential
pacote viaapt
.Em seguida, em um terminal,
cd
para onde você extraiu os arquivos (a execuçãocd ~/Downloads/git*/
deve funcionar) e execute ..Isso instalará o Git no local padrão (
/usr/local
-git
estará em/usr/local/bin/git
)Ele solicitará que você digite sua senha (para
sudo
), para poder gravar no/usr/local/
diretório, que só pode ser acessado pelo usuário "root", portanto é necessário o sudo!Se você quiser instalá-lo em algum lugar separado (para que os arquivos do Git não sejam misturados com outras ferramentas), use
--prefix
o comando configure:Isso instalará o
git
binário no/usr/local/bin/gitpath/bin/git
- para que você não precise digitar isso toda vez que for necessário, adicione ao seu$PATH
adicionando a seguinte linha ao seu~/.profile
:Se você não tiver acesso ao sudo, poderá usar
--prefix=/Users/myusername/bin
e instalar em seu diretório pessoal. Lembre-se de adicionar~/bin/
a$PATH
O script x-git-update-to-latest-version automatiza muito disso:
fonte
yum install git
. Para a execução da GUIyum install git-gui
.sudo port install git-core+bash_completion+doc
fink self-update
deve ajudarGit Reset
Digamos que você faça um puxão, junte-o ao seu código e decida que não gosta. Use git-log, ou tig, e encontre o hash de onde você deseja voltar (provavelmente seu último commit antes da extração / mesclagem), copie o hash e faça:
Em vez do hash, você pode usar HEAD ^ como um atalho para o commit anterior.
fonte
git reset
deve unstage acidentalgit add
Como você configura um repositório de equipe compartilhado?
Como configurar um repositório normal é descrito aqui - mas como você configura um repositório de equipe para que todos possam acessar e enviar?
Usando um sistema de arquivos NFS compartilhado
Supondo que sua equipe já tenha, por exemplo, uma associação de grupo compartilhado que possa ser usada.
Para começar a usar este repositório, a coisa mais fácil é iniciar a partir de um repositório local que você já esteja usando:
Outros agora podem clonar isso e começar a trabalhar:
Usando SSH
Configure uma conta de usuário no servidor de destino. Se você usa uma conta sem senha, uma conta com uma senha ou usa
authorized_keys
realmente, depende do nível de segurança necessário. Dê uma olhada em Configurando Git sobre SSH para obter mais informações.Se todos os desenvolvedores usarem a mesma conta para acessar este repositório compartilhado, você não precisará usar a
--shared
opção acima.Depois de inicializar o repositório da mesma maneira que acima, faça o push inicial como este:
Veja a semelhança com o acima? A única coisa que pode acontecer além disso é o SSH solicitar uma senha se a conta tiver uma senha. Se você receber esse prompt em uma conta sem senha, o servidor SSH provavelmente desabilitou
PermitEmptyPasswords
.A clonagem agora se parece com isso:
fonte
git status
é seu amigo, use-o com frequência. Bom para responder perguntas como:Ao contrário, digamos
svn status
,git status
é executado quase instantaneamente, mesmo em grandes projetos. Muitas vezes eu achava reconfortante enquanto aprendia o git a usá-lo com frequência, para garantir que meu modelo mental do que estava acontecendo fosse preciso. Agora eu apenas o uso principalmente para me lembrar do que mudei desde o meu último commit.Obviamente, é muito mais útil se o seu .gitignore estiver configurado com segurança.
fonte
Confirmar as alterações
Depois de editar um arquivo, você precisa confirmar suas alterações no git. Quando você executa este comando, ele solicita uma mensagem de confirmação - que é apenas um pequeno pedaço de texto que diz a todos o que você mudou.
Confirmará o arquivo main.c no diretório ./source/
confirmará todos os arquivos alterados (mas não os novos arquivos, eles precisam ser adicionados ao índice com o git-add). Se você deseja confirmar apenas alguns arquivos, precisará prepará-los primeiro com o git-add e depois confirmar sem o sinalizador -a.
A confirmação apenas altera seu repositório local, embora não os repositórios remotos. Se você deseja enviar as confirmações para o repositório remoto, precisará fazer um push.
Para alguém vindo do CVS ou SVN, isso é uma alteração, pois o commit no repositório central agora requer duas etapas.
fonte
Como você se ramifica?
A ramificação padrão em um repositório git é chamada
master
.Para criar uma nova ramificação, use
Para ver uma lista de todas as ramificações no tipo de repositório atual
Se você deseja mudar para outro ramo, pode usar
Para criar uma nova ramificação e alternar para ela em uma etapa
Para excluir uma ramificação, use
Para criar uma ramificação com as alterações da ramificação atual, faça
fonte
Obtendo o código mais recente
Isso abrange praticamente todos os casos para obter a cópia mais recente do código do repositório remoto.
fonte
O livro gratuito Pro Git é definitivamente o meu favorito, especialmente para iniciantes.
fonte
Git Magic é tudo que você precisa. Garantido ou seu dinheiro de volta!
fonte
Como você mescla ramificações?
Se você deseja mesclar uma ramificação (por exemplo,
master
pararelease
), verifique se sua ramificação atual é a ramificação de destino na qual você deseja mesclar (usegit branch
ougit status
para ver sua ramificação atual).Então use
(onde
master
é o nome da ramificação que você deseja mesclar com a ramificação atual).Se houver algum conflito, você pode usar
para ver conflitos pendentes que você precisa resolver.
fonte
Eu também achei o Git Internals muito útil. Foi escrito por Scott Chacon (autor do Pro Git e mantenedor do Git Community Book). O que eu mais gosto no Git Internals é que ele se concentra nos conceitos primeiro e depois nos comandos , e sendo que são ~ 100 páginas pequenas, é rapidamente digerível.
fonte
Como você vê o histórico de revisões em um arquivo?
fonte
Como rastrear ramificações remotas
Supondo que exista um repositório remoto do qual você tenha clonado o repositório local e também assumindo que haja uma ramificação chamada 'some_branch' nesse repositório remoto, veja como rastrear localmente:
fonte
git remote show REMOTENAME
Um artigo realmente bom para entender como o Git funciona é A Parábola do Git . Muito recomendado!
fonte
Como você compara duas revisões de um arquivo ou seu arquivo atual e uma revisão anterior?
O comando Comparar é
git diff
.Para comparar duas revisões de um arquivo:
Isso difere commit1 contra commit2; se você alterar a ordem, os arquivos serão alterados de outra maneira, o que pode não ser o que você espera ...
Para comparar o arquivo intermediário atual com o repositório:
Para comparar o arquivo não faseado atual com o repositório:
fonte
Por que mais um howto? Existem realmente bons na rede, como o guia git, que é perfeito para começar. Tem bons links, incluindo o livro git para o qual se pode contribuir (hospedado no git hub) e que é perfeito para essa tarefa coletiva.
No stackoverflow, eu realmente preferiria ver seus truques favoritos!
A minha, que descobri recentemente, é
git stash
explicada aqui , o que permite que você salve seu emprego atual e vá para outro ramoEDIT: como no post anterior, se você realmente prefere o formato stackoverlow com posts como wiki, excluirei esta resposta
fonte
Interface do usuário do console - Tig
Instalação:
Uso
Enquanto estiver dentro de um repositório git, digite 'tig', para visualizar um log interativo, pressione 'enter' em qualquer log para ver mais informações sobre ele. h para obter ajuda, que lista a funcionalidade básica.
Curiosidades
"Tig" é "Git" ao contrário.
fonte
Como posso criar uma ramificação em um repositório remoto?
Supondo que você tenha clonado seu repositório remoto de algum repositório remoto único.
fonte
git push origin name_of_branch
e o ramo já será criado no seu controle remotoname_of_branch
é o nome local, o segundo é o nome da filial remota (desejada), portanto pode serlocal_name_of_branch:remote_name_of_branch
se você quiser que os nomes sejam diferentes. Se você deseja que eles sejam iguais, ainda é necessário especificá-lo assim, pois o b / c git não assume que você deseja que o nome seja o mesmo, a menos que você o diga (existem outros métodos para fazê-lo, No entanto)Comecei com o tutorial oficial do Git . Eu acho que é prático o suficiente para iniciantes (eu era, e ainda sou, um iniciante, por sua definição! Eu mal entendo makefiles, apenas brinquei um pouco com o Apache Subversion, etc.).
fonte
Como faço para excluir uma ramificação em um repositório remoto?
Faça um push no controle remoto usando
:
antes do nome da ramificaçãosendo
origin
o nome do seu controle remoto emybranchname
o nome da filial prestes a ser excluídahttp://help.github.com/remotes/
fonte
Alterações push e pull
De uma maneira simplificada, basta fazer
git push
egit pull
. As alterações são mescladas e, se houver um conflito, o git informará e você poderá resolvê-lo manualmente.Quando você envia pela primeira vez para um repositório remoto, é necessário fazer um
git push origin master
(mestre sendo o ramo mestre). A partir de então você apenas faz ogit push
.Empurre tags com
git push --tags
.fonte
Verificando o código
Primeiro, vá para um diretório vazio, use "git init" para torná-lo um repositório e, em seguida, clone o repositório remoto em seu próprio país.
De onde você clonar inicialmente é de onde o "git pull" será puxado por padrão.
fonte
Gity: http://macendeavor.com/gity
fonte