tutorial - git tutoriel




Git pour les débutants: le guide pratique définitif (20)

Comment «étiqueter» un ensemble particulier de révisions

Comment marquer '' tag '' ou 'libérer' un ensemble particulier de révisions pour un ensemble de fichiers particulier afin que vous puissiez toujours le retirer plus tard?

En utilisant la commande git tag .

Pour simplement "étiqueter" la révision en cours, vous devez simplement exécuter ..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

Pour lister les balises actuelles, lancez simplement git tag sans argument, ou -l (minuscule L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

Pour supprimer une balise, utilisez l'indicateur -d :

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

Pour marquer un commit spécifique (précédent), il vous suffit de le faire.

git tag [tag name] [revision SHA1 hash]

Par exemple:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Note: par défaut, git crée une balise "légère" (essentiellement une référence à une révision spécifique). Le "bon" moyen est d'utiliser le drapeau -a . Cela lancera votre éditeur demandant un message de balise (identique à demander un message de validation, vous pouvez également utiliser l'indicateur -m pour fournir le message de balise sur la ligne de commande). L'utilisation d'une balise annotée crée un objet avec son propre ID, date, tagger (auteur) et éventuellement une signature GPG (en utilisant la balise -s ). Pour plus d'informations à ce sujet, voir ce post

git tag mytagwithmsg -a -m 'This is a tag, with message'

Et pour lister les balises avec des annotations, utilisez l'indicateur -n1 pour afficher 1 ligne de chaque balise ( -n245 pour afficher les 245 premières lignes de chaque annotation, et ainsi de suite):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

Pour plus d'informations, consultez la page de manuel git-tag (1)

Ok, après avoir vu ce post par PJ Hyett , j'ai décidé de passer à la fin et d'aller avec Git .

Donc, ce dont j'ai besoin, c'est d'un guide pratique pour débutants sur Git. "Débutant" étant défini comme quelqu'un qui sait comment gérer son compilateur, comprend à un certain niveau ce qu'est un Makefile , et a touché le contrôle de la source sans bien le comprendre.

"Pratique" étant défini comme cette personne ne veut pas entrer dans les détails concernant ce que Git fait en arrière-plan, et ne se soucie même pas (ou ne sait pas) que c'est distribué. Vos réponses pourraient faire allusion aux possibilités, mais essayez de viser le débutant qui veut garder un référentiel 'principal' sur un 'serveur' qui est sauvegardé et sécurisé, et traiter son référentiel local comme une simple ressource 'client'.

Alors:

Installation / Configuration

Travailler avec le code

Marquage, branchement, rejets, lignes de base

Autre

  • Décrivez et créez un lien vers une bonne interface graphique, un plugin IDE, etc. qui fait de Git une ressource en ligne sans commande, mais veuillez en énumérer les limites ainsi que les bonnes.
    • msysgit - Plate-forme croisée, fournie avec Git
    • msysgit - Visionneuse d'historique de plateforme croisée, incluse avec Git
    • msysgit - Mac OS X
    • msysgit - msysgit Mac OS X
    • msysgit - Plateforme multiplateforme, commerciale, beta
    • tig - console GUI pour Linux
    • qgit - GUI pour Windows, Linux
    • msysgit - paquet pour Windows, comprend une interface graphique conviviale
  • Toutes les autres tâches courantes qu'un débutant devrait savoir?
  • Comment puis-je travailler efficacement avec un ensemble de référentiels subversion en tant que source de contrôle de source?

Les autres références de Git pour débutants

Fouiller dans Git

Je vais passer en revue les entrées de temps en temps et les «ranger» afin qu'elles aient un aspect cohérent et qu'il soit facile de balayer la liste - n'hésitez pas à suivre un simple «en-tête - brève explication - liste d'instructions - getchas et info supplémentaire "modèle. Je vais également faire un lien vers les entrées de la liste ci-dessus afin qu'il soit facile de les retrouver plus tard.


Comment branchez-vous?

La branche par défaut dans un dépôt git s'appelle master .

Pour créer une nouvelle utilisation de branche

git branch <branch-name>

Pour voir une liste de toutes les branches dans le type de référentiel actuel

git branch

Si vous voulez passer à une autre branche, vous pouvez utiliser

git checkout <branch-name>

Pour créer une nouvelle branche et y passer en une seule étape

git checkout -b <branch-name>

Pour supprimer une branche, utilisez

git branch -d <branch-name>

Pour créer une branche avec les changements de la branche actuelle, faites

git stash
git stash branch <branch-name>

Comment créez-vous un nouveau projet / référentiel?

Un dépôt git est simplement un répertoire contenant un .git spécial .git .

Ceci est différent des systèmes de contrôle de version «centralisés» (comme subversion), où un «référentiel» est hébergé sur un serveur distant, que vous checkout dans un répertoire «copie de travail». Avec git, votre copie de travail est le référentiel.

Il suffit de lancer git init dans le répertoire qui contient les fichiers que vous souhaitez suivre.

Par exemple,

cd ~/code/project001/
git init

Cela crée un .git (caché) dans le répertoire en cours.

Pour créer un nouveau projet, lancez git init avec un argument supplémentaire (le nom du répertoire à créer):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

Pour vérifier si le chemin courant est dans un dépôt git, lancez simplement l' git status - s'il ne s'agit pas d'un dépôt, il indiquera "fatal: Not a git repository"

Vous pouvez également lister le répertoire .git et vérifier qu'il contient des fichiers / répertoires similaires à ce qui suit:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

Si, pour une raison quelconque, vous souhaitez "dé-giter" un dépôt (vous souhaitez arrêter d'utiliser git pour suivre ce projet). Supprimez simplement le répertoire .git au niveau de base du référentiel.

cd ~/code/project001/
rm -rf .git/

Attention: Cela détruira tout l' historique des révisions, tous vos tags, tout ce que git a fait. Il ne touchera pas les fichiers "en cours" (les fichiers que vous pouvez actuellement voir), mais les changements précédents, les fichiers supprimés et ainsi de suite seront irrécupérables!


Comment installer Git

Sur Windows:

Installez msysgit

Il y a plusieurs téléchargements:

  • Git: Utilisez ceci sauf si vous avez spécifiquement besoin d'une des autres options ci-dessous.
  • PortableGit: Utilisez-le si vous voulez exécuter Git sur un PC sans l'installer sur ce PC (par exemple, lancer Git depuis un lecteur USB)
  • msysGit: Utilisez ceci si vous voulez développer Git lui-même. Si vous voulez simplement utiliser Git pour votre code source, mais que vous ne voulez pas modifier le code source de Git , vous n'avez pas besoin de cela.

Cela installe aussi un shell bash Cygwin, donc vous pouvez utiliser le git dans un shell plus agréable (que cmd.exe), et inclut également git-gui (accessible via la commande git gui , ou le Start > All Programs > Git )

Mac OS X

Utilisez le programme d' git-osx-installer , ou vous pouvez également installer à partir de la source

Via un gestionnaire de paquets

Installez git utilisant votre gestionnaire de paquets natif. Par exemple, sur Debian (ou Ubuntu):

apt-get install git-core

Ou sur Mac OS X, via MacPorts :

sudo port install git-core+bash_completion+doc

... ou fink:

fink install git

... ou Homebrew :

brew install git

Sur les distributions basées sur Red Hat, telles que Fedora:

yum install git

Dans Cygwin le paquet Git peut être trouvé dans la section "devel"

De la source (Mac OS X / Linux / BSD / etc.)

Sous Mac OS X, si les outils de développement sont installés, vous pouvez compiler Git depuis la source très facilement. Téléchargez la dernière version de Git en .tar.bz ou .tar.gz depuis http://git-scm.com/ , et extrayez-la (double-cliquez dans le Finder)

Sur Linux / BSD / etc. ça devrait être pareil. Par exemple, dans Debian (et Ubuntu), vous devez installer le paquet build-essential via apt .

Puis dans un Terminal, cd à l'endroit où vous avez extrait les fichiers (en cours d'exécution cd ~/Downloads/git*/ devrait fonctionner), puis exécutez ..

./configure && make && sudo make install

Cela installera Git à l'emplacement par défaut ( /usr/local - donc git sera dans /usr/local/bin/git )

Il vous demandera d'entrer votre mot de passe (pour sudo ), afin qu'il puisse écrire dans le /usr/local/ , accessible seulement par l'utilisateur "root" donc sudo est requis!

Si vous voulez l'installer quelque part séparément (donc les fichiers de Git ne sont pas mélangés avec d'autres outils), utilisez --prefix avec la commande configure:

./configure --prefix=/usr/local/gitpath
make
sudo make install

Cela installera le binaire git dans /usr/local/bin/gitpath/bin/git - donc vous n'avez pas à le taper chaque fois que vous, vous devriez ajouter dans votre $PATH en ajoutant la ligne suivante dans votre ~/.profile :

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

Si vous n'avez pas d'accès sudo, vous pouvez utiliser --prefix=/Users/myusername/bin et l'installer dans votre répertoire personnel. N'oubliez pas d'ajouter ~/bin/ à $PATH

Le script x-git-update-to-latest-version automatise beaucoup de ceci:

Ce script met à jour mon clone local du repo git (localy à ~/work/track/git ), puis configure, installe (at /usr/local/git - git describe ) et met à jour le lien symbolique /usr/local/git .

De cette façon, je peux avoir /usr/local/git/bin dans mon PATH et j'utilise toujours la dernière version.

La dernière version de ce script installe également les pages de manuel. Vous devez modifier votre MANPATH pour inclure le /usr/local/git/share/man .


Git Reset

Dites que vous faites un pull, fusionnez-le dans votre code, et décidez que vous ne l'aimez pas. Utilisez git-log, ou tig, et trouvez le hash où vous voulez revenir (probablement votre dernier commit avant le pull / merge) copiez le hash, et faites:

# Revert to a previous commit by hash:
git-reset --hard <hash>

Au lieu du hachage, vous pouvez utiliser HEAD ^ comme raccourci pour le commit précédent.

# Revert to previous commit:
git-reset --hard HEAD^

Checking Out Code

D'abord allez dans un répertoire vide, utilisez "git init" pour en faire un référentiel, puis clonez le repo distant dans le vôtre.

git clone [email protected]:/dir/to/repo

Partout où vous clonez initialement est où "git pull" tirera par défaut.


How can I create a branch on a remote repository?

Assuming that you have cloned your remote repository from some single remote repository.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

How do you compare two revisions of a file, or your current file and a previous revision?

Compare command is git diff .

To compare 2 revisions of a file:

$ git diff <commit1> <commit2> <file_name>

That diffs commit1 against commit2; if you change order then files are diffed the other way round, which may not be what you expect...

To compare current staged file against the repository:

$ git diff --staged <file_name>

To compare current unstaged file against the repository:

$ git diff <file_name>

How do you see the history of revisions to a file?

git log -- filename

How to track remote branches

Assuming there is a remote repository that you cloned your local repository from and also assuming that there is a branch named 'some_branch' on that remote repository, here is how to track it locally:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push

Commettre des modifications

Une fois que vous avez modifié un fichier, vous devez valider vos modifications dans git. Lorsque vous exécutez cette commande, il vous demandera un message de validation - qui est juste un simple texte qui indique à tout le monde ce que vous avez changé.

$ git commit source/main.c

Va valider le fichier main.c dans le répertoire ./source/

$ git commit -a # the -a flag pulls in all modified files

va valider tous les fichiers modifiés (mais pas les nouveaux fichiers, ceux-ci doivent être ajoutés à l'index avec git-add). Si vous ne voulez valider que certains fichiers, vous devrez les mettre en scène d'abord avec git-add, puis les valider sans l'option -a.

La validation ne modifie que votre référentiel local, mais pas les dépôts distants. Si vous souhaitez envoyer les validations au référentiel distant, vous devrez effectuer un push.

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

Pour quelqu'un venant de CVS ou de SVN, ceci est un changement puisque la validation dans le dépôt central nécessite maintenant deux étapes.


Obtenir le dernier code

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

Cela couvre à peu près tous les cas pour obtenir la dernière copie du code à partir du dépôt distant.


Eh bien, malgré le fait que vous nous ayez demandé de ne pas "simplement" établir un lien avec d'autres ressources, il est stupide de voir qu'il existe déjà une ressource communautaire (et croissante) qui est vraiment très bonne: le Git Community Book . Sérieusement, cette question de 20+ dans une question va être tout sauf concis et cohérent. Le livre communautaire Git est disponible en version HTML et PDF et répond à de nombreuses questions grâce à des réponses claires, bien formatées et évaluées par des pairs et dans un format qui vous permet de passer directement à votre problème.

Hélas, si mon message vous dérange vraiment, je vais le supprimer. Dites-le juste.


Exemple de workflow avec GIT.

Git est extrêmement flexible et s'adapte bien à n'importe quel flux de travail, mais ne pas appliquer un flux de travail particulier pourrait avoir un effet négatif sur la compréhension de ce que vous pouvez faire avec git au-delà du workflow linéaire de sauvegarde. .

Ce blog explique bien un workflow très simple mais efficace, facile à configurer avec git.

citant l'article du blog: Nous considérons que origin / master est la branche principale où le code source de HEAD reflète toujours un état prêt pour la production:

Le workflow est devenu assez populaire pour avoir fait un projet qui implémente ce workflow: git-flow

Belle illustration d'un workflow simple, où vous faites tous vos changements en développement, et ne faites que pousser à maîtriser lorsque le code est dans un état de production:

Supposons maintenant que vous souhaitiez travailler sur une nouvelle fonctionnalité ou sur la refonte d'un module. Vous pourriez créer une nouvelle branche, ce que nous pourrions appeler une branche "feature", quelque chose qui prendra du temps et pourrait casser du code. Une fois que votre fonctionnalité est "assez stable" et que vous souhaitez la rapprocher de la production, vous fusionnez votre branche de fonctionnalité pour la développer. Lorsque tous les bogues sont triés après la fusion et que votre code passe tous les tests, vous poussez vos changements dans le maître.

Pendant tout ce processus, vous trouvez un bug de sécurité terrible, qui doit être réparé tout de suite. Vous pouvez avoir une branche appelée hotfixes, qui effectue des modifications qui sont repoussées plus rapidement dans la production que la branche "develop" normale.

Vous avez ici une illustration de ce à quoi pourrait ressembler cette fonction / hotfix / develop / workflow de production (bien expliqué dans le blog, et je le répète, le post de blog explique l'ensemble du processus avec beaucoup plus de détails et beaucoup mieux que moi .


Git Magic is all you'll ever need. Guaranteed or your money back!


git status est votre ami, utilisez-le souvent. Bon pour répondre à des questions comme:

  • Qu'est-ce que cette commande a fait?
  • Dans quelle branche je suis?
  • Quels changements vais-je commettre, et ai-je oublié quelque chose?
  • Étais-je au milieu de quelque chose la dernière fois que j'ai travaillé sur ce projet (jours, semaines, ou peut-être mois)?

Contrairement à, par exemple, le svn status git status fonctionne presque instantanément, même sur de grands projets. Je l'ai souvent trouvé rassurant tout en apprenant à Git à l'utiliser fréquemment, pour m'assurer que mon modèle mental de ce qui se passait était précis. Maintenant, je l'utilise principalement pour me rappeler ce que j'ai changé depuis mon dernier commit.

Évidemment, c'est beaucoup plus utile si votre .gitignore est correctement configuré.


A real good paper for understanding how Git works is The Git Parable . Very recommended!


I got started with the official Git tutorial . I think it's practical enough for beginners (I was, and still am, a beginner, by your definition! I barely grasp makefiles, I've only played a bit with Apache Subversion, etc.).


The Pro Git free book is definitely my favorite, especially for beginners.


Why yet another howto? There are really good ones on the net, like the git guide which is perfect to begin. It has good links including the git book to which one can contribute (hosted on git hub) and which is perfect for this collective task.

On , I would really prefer to see your favorite tricks !

Mine, which I discovered only lately, is git stash , explained here , which enables you to save your current job and go to another branch

EDIT: as the previous post, if you really prefer stackoverlow format with posts as a wiki I will delete this answer







version-control