web-dev-qa-db-fra.com

Git pour les débutants: Le guide pratique par excellence

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

Il me faut donc un guide pratique (- === -) pour débutants sur Git. "Débutant" étant défini comme quelqu'un qui sait manipuler son compilateur, comprend à un certain niveau ce qu'est Makefile et a touché au contrôle de source sans très bien le comprendre.

Le terme "pratique" signifie que cette personne ne veut pas entrer dans les détails de ce que Git fait en arrière-plan et ne se soucie même pas (ou ne sait pas) qu'elle est distribuée. Vos réponses pourraient faire allusion aux possibilités, mais essayez de viser le débutant qui souhaite conserver un référentiel "principal" sur un "serveur" 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, versions, lignes de base

Autre

  • Décrivez et connectez-vous à une bonne interface graphique, IDE plug-in, etc., qui fait de Git une ressource ne se trouvant pas sur la ligne de commande, mais veuillez en indiquer les limites et son utilité.
    • msysgit - Multiplateforme, fournie avec Git
    • gitk - Visualiseur d'historique sur plusieurs plates-formes, fourni avec Git
    • gitnub - Mac OS X
    • gitx - Visualiseur d'historique Mac OS X
    • smartgit - Multiplateforme, commerciale, bêta
    • tig - interface graphique de la console pour Linux
    • qgit - Interface graphique pour Windows, Linux
    • Git Extensions - package pour Windows, comprend une interface graphique conviviale
  • Toute autre tâche courante qu'un débutant devrait connaître?
  • Comment travailler efficacement avec un ensemble de référentiels Subversion en tant que source de contrôle de source?

Autres références de débutant Git

Plonger dans Git

Je passerai en revue les entrées de temps en temps et les "ranger" pour qu'elles aient un aspect cohérent et qu'il soit facile de parcourir la liste - n'hésitez pas à suivre un en-tête - une brève explication - une liste d'instructions - informations supplémentaires ". Je ferai également un lien vers les entrées de la liste ci-dessus afin qu'il soit facile de les retrouver plus tard.

854
Adam Davis

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

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

Cela diffère des systèmes de contrôle de version "centralisés" (comme Subversion), dans lesquels un "référentiel" est hébergé sur un serveur distant, dans lequel vous checkout dans un répertoire "copie de travail". Avec git, votre copie de travail est le référentiel.

Exécutez simplement git init dans le répertoire contenant les fichiers que vous souhaitez suivre.

Par exemple,

cd ~/code/project001/
git init

Cela crée un dossier .git (caché) dans le répertoire actuel.

Pour créer un nouveau projet, exécutez 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 actuel est dans un référentiel git, exécutez simplement git status - s'il ne s'agit pas d'un référentiel, il signalera "fatal: pas un référentiel git".

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

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

Si, pour une raison quelconque, vous souhaitez "décompresser" un référentiel (vous souhaitez cesser 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: Ceci détruira tout l'historique des révisions, tous vos balises, tout git a fait. Il ne touchera pas les fichiers "actuels" (les fichiers que vous pouvez voir actuellement), mais les modifications précédentes, les fichiers supprimés, etc., seront irrécupérables!

118
dbr

Interfaces graphiques pour git


Git GUI

Inclus avec git - Exécutez git gui à partir de la ligne de commande et le programme d'installation Windows msysgit l'ajoute au menu Démarrer.

L'interface graphique de Git peut faire la majorité de ce que vous devez faire avec git. Y compris les changements d’étape, la configuration de git et de référentiels, les modifications Push, la création/extraction/suppression de branches, la fusion et bien d’autres choses encore.

Une de mes fonctionnalités préférées est les raccourcis "ligne d'étape" et "morceau d'étape" dans le menu contextuel, qui vous permettent de valider des parties spécifiques d'un fichier. Vous pouvez obtenir la même chose avec git add -i, mais je trouve cela plus facile à utiliser.

Ce n’est pas l’application la plus jolie, mais elle fonctionne sur presque toutes les plateformes (basée sur Tcl/Tk)

Captures d'écran | n screencast


GitK

Aussi inclus avec git. C'est un visualiseur d'historique git qui vous permet de visualiser l'historique d'un référentiel (y compris les branches, leur création et leur fusion). Vous pouvez afficher et rechercher des commits.

Va bien ensemble avec git-gui.


Gitnub

Application Mac OS X. Principalement un équivalent de git log, mais a une intégration avec github (comme la "vue réseau").

C’est joli et s’adapte parfaitement à Mac OS X. Vous pouvez rechercher des référentiels. La plus grande critique de Gitnub est qu’il montre l’histoire de manière linéaire (une branche à la fois) - elle ne visualise pas les ramifications et les fusions, ce qui peut être important avec git, bien qu’il s’agisse d’une amélioration planifiée.

liens de téléchargement, journal des modifications et captures d'écran | référentiel git


GitX

Intention d'être un "clone de gitk pour OS X".

Il peut visualiser l’historique des ramifications non linéaires, effectuer des commits, visualiser et rechercher des commits, et il a quelques autres fonctionnalités intéressantes comme être capable de "Quicklook" n’importe quel fichier dans n’importe quelle révision (espace presse dans la vue liste), exporter n'importe quel fichier. (par glisser-déposer).

Il est bien mieux intégré à OS X que git-gui/gitk, et il est rapide et stable même avec des référentiels exceptionnellement grands.

Le dépôt git original pieter n'a pas été mis à jour récemment (plus d'un an à la date de rédaction). Une branche plus activement gérée est disponible à l’adresse brotherbard/gitx - Elle ajoute "sidebar, chercher, tirer, pousser, ajouter à distance, fusionner, sélectionner, réassembler, cloner, cloner vers"

Télécharger | Captures d'écran | référentiel git | fork de brotherbard | laullon fork


SmartGit

De la page d'accueil:

SmartGit est une interface pour le système de contrôle de version distribué Git et fonctionne sous Windows, Mac OS X et Linux. SmartGit est destiné aux développeurs qui préfèrent une interface utilisateur graphique à un client en ligne de commande, pour être encore plus productif avec Git - le DVCS le plus puissant actuellement.

Vous pouvez le télécharger à partir de leur site web .

Télécharger


TortoiseGit

Version TortoiseSVN Git pour les utilisateurs Windows.

Il porte TortoiseSVN sur TortoiseGit. La dernière version 1.2.1.0 peut compléter les tâches courantes, telles que commit, afficher le journal, diff deux versions, créer une branche et une balise, créer un correctif, etc. Voir ReleaseNotes pour plus de détails. Bienvenue à contribuer à ce projet.

Télécharger


QGit

QGit est un visualiseur d'interface graphique git construit sur Qt/C++.

Avec qgit, vous pourrez parcourir l'historique des révisions, afficher le contenu des correctifs et les fichiers modifiés, en suivant graphiquement les différentes branches de développement.

Télécharger


gitg

gitg est un visualiseur de référentiel git ciblant gtk +/GNOME. L'un de ses principaux objectifs est de fournir une expérience utilisateur plus unifiée pour les interfaces git sur plusieurs bureaux. Il ne s’agit pas d’une application multiplate-forme, mais d’une étroite collaboration avec des clients similaires pour d’autres systèmes d’exploitation (comme GitX pour OS X).

Caractéristiques

  • Parcourir l'historique des révisions.
  • Manipulez des référentiels volumineux (charge le référentiel Linux, plus de 17 000 révisions, en moins d'une seconde).
  • Commit les changements.
  • Mettez en scène/démontez les beaux mecs.
  • Rétablir les changements.
  • Afficher les différences colorisées des modifications apportées aux révisions.
  • Parcourez l'arborescence pour une révision donnée.
  • Exporter des parties de l’arbre d’une révision donnée.
  • Fournissez toute référence de référence qu'une commande telle que 'git log' peut comprendre pour construire l'historique.
  • Afficher et basculer entre les branches dans la vue historique.

Télécharger: releases ou source


Gitbox

Gitbox est une interface graphique Mac OS X pour le système de contrôle de version Git. Dans une seule fenêtre, vous voyez les branches, l’historique et l’état du répertoire de travail.

Les opérations quotidiennes sont faciles: modifiez les étapes et les étapes avec une case à cocher. Commettre, tirer, fusionner et pousser en un seul clic. Double-cliquez sur une modification pour afficher un diff avec FileMerge.app.

Télécharger


Gity

Le site Web de Gity ne contient pas beaucoup d’informations, mais il ressort des captures d’écran qu’il s’agit d’un git gui Open Source riche en fonctionnalités.

Télécharger ou source


Meld

Meld est un outil visuel de diff et de fusion. Vous pouvez comparer deux ou trois fichiers et les éditer à la place (les différences sont mises à jour dynamiquement). Vous pouvez comparer deux ou trois dossiers et lancer des comparaisons de fichiers. Vous pouvez parcourir et afficher une copie de travail à partir de systèmes de contrôle de version populaires tels que CVS, Subversion, Bazaar-ng et Mercurial [ et Git ].

Téléchargements


Katana

Une interface graphique Git pour OSX de Steve Dekorte.

En un coup d'œil, identifiez les branches distantes pour lesquelles des modifications doivent être extraites et les mises en pension locales sont modifiées en Push. Les opérations git de add, commit, Push, pull, tag et reset sont prises en charge, ainsi que les différences visuelles et la navigation visuelle de la hiérarchie du projet qui met en évidence les modifications et les ajouts locaux.

Gratuit pour 1 dépôt, 25 $ pour plus.

Télécharger


Sprout (anciennement GitMac)

Se concentre sur la facilité d'utilisation de Git. Comprend une interface utilisateur native de type cacao (mac-like), une navigation rapide dans les référentiels, le clonage, le transfert/extraction, la création de branches/fusions, des différences visuelles, des branches distantes, un accès facile au terminal, etc.

En rendant les actions Git les plus couramment utilisées intuitives et faciles à réaliser, Sprout (anciennement GitMac) rend Git convivial. Compatible avec la plupart des flux de travail Git, Sprout est idéal pour les concepteurs et les développeurs, les équipes de travail et les utilisateurs avancés et novices.

Télécharger | Site Web


Tour

Une interface graphique Git riche en fonctionnalités pour Mac OSX. Essai gratuit de 30 jours, 59 USD pour une licence mono-utilisateur.

Télécharger | Site Web


EGit

EGit est un fournisseur Eclipse Team pour le système de contrôle de version Git. Git est un GDS distribué, ce qui signifie que chaque développeur possède une copie complète de l'historique de chaque révision du code, ce qui rend les requêtes sur l'historique très rapides et polyvalentes.

Le projet EGit implémente l'outillage Eclipse en plus de l'implémentation JGit Java de Git.

Télécharger | Site Web


Extensions Git

Open Source pour Windows - installe tout ce dont vous avez besoin pour travailler avec Git dans un seul package, facile à utiliser.

Git Extensions est une boîte à outils qui rend le travail avec Git sous Windows plus intuitif. L’extension Shell s’intégrera dans l’explorateur Windows et présentera un menu contextuel sur les fichiers et les répertoires. Il existe également un plugin Visual Studio pour utiliser git à partir de Visual Studio.

Télécharger

Un grand merci à dbr pour avoir expliqué le sujet git gui.


SourceTree

SourceTree est un client Mac gratuit pour Git, Mercurial et SVN. Construit par Atlassian, les gens derrière BitBucket, il semble fonctionner aussi bien avec n’importe quel système VC, ce qui vous permet de maîtriser un seul outil à utiliser avec tous vos projets, même s’ils sont contrôlés par la version. Avec beaucoup de fonctionnalités et GRATUIT.

Prêt pour les experts et riche en fonctionnalités pour les utilisateurs novices et avancés:

Examinez les changesets entrants et sortants. Cherry-pick entre les branches. Traitement des correctifs, rebasement, stockage/stockage et bien plus encore.

Télécharger | Site Web


110
dylanfm

Eh bien, bien que vous ayez demandé à ne pas simplement nous lier à d'autres ressources, il est assez ridicule de constater qu'il existe déjà une ressource développée par la communauté qui est vraiment très bonne: Git Community Book . Sérieusement, ces 20 questions dans une question vont être tout sauf concises et cohérentes. Le livre de la communauté Git est disponible au format HTML et PDF. Il répond à beaucoup de vos questions avec des réponses claires, bien formatées et révisées par des pairs, et dans un format vous permettant de passer directement à votre problème actuel.

Hélas, si mon message vous contrarie vraiment, je vais le supprimer. Dis-le simplement.

59
Pat Notz

Comment le configurer pour ignorer les fichiers:

La possibilité d’avoir git ignore les fichiers que vous ne souhaitez pas suivre est très utile.

Pour ignorer un fichier ou un ensemble de fichiers, vous devez fournir un motif. La syntaxe de motif pour git est assez simple, mais puissante. Cela s'applique aux trois fichiers que je mentionnerai ci-dessous.

  • Une ligne vide n'ignore aucun fichier, elle est généralement utilisée comme séparateur.
  • Les lignes commençant par # servent de commentaires.
  • Le préfixe ! est facultatif et annulera le motif. Tout modèle inversé qui correspond remplacera les modèles de priorité inférieure.
  • Prend en charge les expressions avancées et les caractères génériques
    • Ex: Le modèle: *. [Oa] ignorera tous les fichiers du référentiel se terminant par .o ou .a (fichiers objets et archives)
  • Si un modèle a un répertoire se terminant par une barre oblique, git ne fera correspondre que ce répertoire et les chemins situés en dessous. Cela exclut les fichiers normaux et les liens symboliques de la correspondance.
  • Une barre oblique correspondra à tous les fichiers de ce nom de chemin.
    • Ex: Le modèle /*. C correspondra au fichier foo.c mais pas bar/awesome.c

Excellent exemple tiré de la page de manuel gitignore (5) :

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

En général, il existe trois manières différentes d’ignorer les fichiers non suivis.

1) Ignorer pour tous les utilisateurs du référentiel:

Ajoutez un fichier nommé . Gitignore à la racine de votre copie de travail.

Modifiez . Gitignore selon vos préférences pour quels fichiers ne doivent pas être ignorés.

git add .gitignore 

et commettez quand vous avez fini.

2) Ignorez uniquement votre copie du référentiel:

Ajoutez/modifiez le fichier $ GIT_DIR/info/exclude dans votre copie de travail, avec vos modèles préférés.

Ex: Ma copie de travail est ~/src/project1 donc je voudrais éditer ~/src/project1/.git/info/exclude

Vous avez terminé!

3) Ignorez toutes les situations sur votre système:

Les modèles globaux pour votre système peuvent être placés dans un fichier nommé comme vous le souhaitez.

Le mien s'appelle personnellement ~/.gitglobalignore

Je peux ensuite informer git de ce fichier en éditant mon fichier ~/.gitconfig à l'aide de la ligne suivante:

core.excludesfile = ~/.gitglobalignore

Vous avez terminé!

Je trouve que la page de manuel gitignore est la meilleure ressource pour obtenir plus d’informations.

56
Brian Gianforcaro

Comment pouvez-vous "taguer" un ensemble particulier de révisions

Comment "marquez-vous" ou "relâchez-vous" un ensemble particulier de révisions pour un ensemble particulier de fichiers afin de pouvoir toujours le récupérer plus tard?

Utilisation de la commande git tag.

Pour simplement "marquer" la révision actuelle, il vous suffira de lancer ..

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

Pour répertorier les balises actuelles, exécutez simplement git tag sans arguments, ou -l (L minuscule):

$ 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 baliser 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

Remarque: par défaut, git crée une balise "légère" (essentiellement une référence à une révision spécifique). La "bonne" méthode consiste à utiliser le drapeau -a. Ceci lancera votre éditeur demandant un message de balise (identique à demander un message de validation, vous pouvez également utiliser le drapeau -m pour fournir le message de balise sur la ligne de commande). L'utilisation d'une balise annotée crée un objet avec ses propres ID, date, étiqueteur (auteur) et éventuellement une signature GPG (à l'aide de la balise -s). Pour plus d'informations à ce sujet, voir cet article

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

Et pour répertorier les balises avec des annotations, utilisez le drapeau -n1 pour afficher 1 ligne de chaque message de balise (-n245 pour afficher les 245 premières lignes de chaque annotation, etc.):

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

Pour plus d'informations, voir la Page de manuel de git-tag (1)

47
dbr

Exemple de workflow avec GIT.

Git est extrêmement flexible et s’adapte bien à tout flux de travail, mais ne pas appliquer un flux de travail particulier peut avoir l’effet négatif de rendre difficile la compréhension de ce que vous pouvez faire avec Git au-delà du flux de travail "de sauvegarde" linéaire et de l’utilité de la création de branches par exemple. .

Ce article de blog explique joliment un flux de travail très simple mais efficace et très facile à configurer avec git.

citation de l'article de blog: Nous considérons que Origin/master est la branche principale où le code source de HEAD reflète toujours un état de 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 apportez toutes vos modifications dans develop, et uniquement Push to master lorsque le code est en état de production:

simple workflow

Supposons maintenant que vous souhaitiez travailler sur une nouvelle fonctionnalité ou sur la refactorisation d'un module. Vous pouvez créer une nouvelle branche, ce que nous pourrions appeler une branche "feature", quelque chose qui prendra du temps et risque de casser du code. Une fois que votre fonctionnalité est "suffisamment stable" et que vous souhaitez la "rapprocher" de la production, vous fusionnez votre branche de fonctionnalités en développement. Lorsque tous les bogues sont triés après la fusion et que votre code a réussi tous les tests, vous transmettez vos modifications au maître.

Pendant tout ce processus, vous trouvez un terrible problème de sécurité, qui doit être corrigé immédiatement. Vous pouvez avoir une branche appelée correctif logiciel, qui effectue des modifications qui sont repoussées plus rapidement dans la production que la branche "développement" normale.

Vous avez ici une illustration de l’apparence de cette fonctionnalité/correctif/développement/production (bien expliqué dans le billet de blog, et je le répète, le billet de blog explique le processus dans son intégralité de manière beaucoup plus détaillée et bien meilleure que la mienne. .

Git workflow example

46
ashwoods

Voici une copie du message de PJ Hyett, car il n'est plus disponible:

Git n'est pas difficile

23 novembre 2008

Lorsque nous disons aux gens pourquoi ils devraient utiliser Git plutôt que Subversion, la phrase de choix est: "Git fait mieux Subversion que Subversion, mais il en fait beaucoup plus que cela."

Le "beaucoup plus" est composé d’un ensemble de choses qui font vraiment briller Git, mais cela peut être très pénible pour ceux qui viennent d’autres sociétés de SCM comme Subversion.

Cela dit, rien ne vous empêche d’utiliser Git comme vous utilisez Subversion pendant la transition.

En supposant que vous ayez installé le logiciel nécessaire et que vous disposiez d’un référentiel distant, procédez comme suit: saisissez le code et transmettez vos modifications avec Subversion:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

Et comment le ferais-tu à Git:

$ git clone [email protected]:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git Push

Encore une commande pour que cela se produise dans Git. Cette commande supplémentaire a de grandes implications, mais pour les besoins de cet article, c’est tout ce dont nous parlons, une commande supplémentaire.

Vous voyez, ce n’est vraiment pas si difficile.

pdate: Je ne voudrais pas mentionner que l'équivalent de mettre à jour votre copie locale dans Subversion par rapport à Git est respectivement svn update et git pull. Une seule commande dans les deux cas.

39
Adam Davis

Comment installer Git

Sous Windows:

Installer msysgit

Il y a plusieurs téléchargements:

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

Cela installe également un shell Cygwin bash, vous pouvez donc 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 m e n u)

Mac OS X

Utilisez le git-osx-installer , ou vous pouvez également installer depuis le source

Via un gestionnaire de paquets

Installez git en 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 se trouve 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 très facilement compiler Git à partir du code source. Téléchargez la dernière version de Git en tant que .tar.bz ou .tar.gz à partir de http://git-scm.com/ et extrayez-la (double-cliquez dans le Finder).

Sous Linux/BSD/etc. ça devrait être à peu près pareil. Par exemple, dans Debian (et Ubuntu), vous devez installer le paquetage build-essential via apt.

Ensuite, dans un terminal, cd dans lequel vous avez extrait les fichiers (l'exécution de cd ~/Downloads/git*/ devrait fonctionner), puis exécutez ..

./configure && make && Sudo make install

Ceci installera Git à la place par défaut (/usr/local - donc git sera dans /usr/local/bin/git)

Il vous demandera de saisir votre mot de passe (pour Sudo), afin de pouvoir écrire dans le répertoire /usr/local/, auquel seul l'utilisateur "root" a accès, donc Sudo est requis!

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

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

Ceci installera le binaire git dans /usr/local/bin/gitpath/bin/git - vous n'aurez donc pas à taper cela à chaque fois que vous devez l'ajouter à votre $PATH en ajoutant la ligne suivante à votre ~/.profile:

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

Si vous n'avez pas 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 ces choses:

Ce script met à jour mon clone local du dépôt git (localy à ~/work/track/git), puis configure, installe (à /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 ajuster votre MANPATH pour inclure le répertoire /usr/local/git/share/man.

33
dbr

Git Reset

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

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

Au lieu du hachage, vous pouvez utiliser HEAD ^ comme raccourci pour la validation précédente.

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

Comment configurez-vous un référentiel d'équipe partagé?

Comment configurer un référentiel normal est décrit ici - mais comment configurer un référentiel d'équipe que tout le monde peut extraire et pousser de et vers?

Utilisation d'un système de fichiers NFS partagé

En supposant que votre équipe ait déjà par exemple une appartenance à un groupe partagé qui peut être utilisée.

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

Pour commencer à utiliser ce référentiel, la meilleure chose à faire est de démarrer à partir d'un référentiel local que vous utilisiez déjà:

cd your/local/workspace/project
git remote add Origin /your/share/folder/project.git
git Push Origin master

D'autres peuvent maintenant cloner ceci et commencer à travailler:

cd your/local/workspace
git clone /your/share/folder/project.git

Utiliser SSH

Configurez un compte d'utilisateur sur le serveur cible. Que vous utilisiez un compte sans mot de passe, un compte avec un mot de passe ou utilisez authorized_keys dépend vraiment du niveau de sécurité requis. Jetez un œil à Configuration de Git sur SSH pour plus d’informations.

Si tous les développeurs utilisent le même compte pour accéder à ce référentiel partagé, vous n'avez pas besoin d'utiliser l'option --shared comme ci-dessus.

Après avoir lancé le référentiel de la même manière que ci-dessus, vous effectuez le Push initial comme suit:

cd your/local/workspace/project
git remote add Origin user@server:/path/to/project.git
git Push Origin master

Voir la similitude avec ce qui précède? En plus, SSH peut demander un mot de passe si le compte en a un. Si vous recevez cette invite sur un compte sans mot de passe, le serveur SSH a probablement désactivé PermitEmptyPasswords.

Le clonage ressemble maintenant à ceci:

cd your/local/workspace
git clone user@server:/path/to/project.git
31
Asgeir S. Nilsen

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

  • Qu'est-ce que cette commande vient de faire?
  • Sur quelle branche suis-je?
  • Quels changements suis-je sur le point de commettre et ai-je oublié quelque chose?
  • Étais-je en train de faire quelque chose la dernière fois que j'ai travaillé sur ce projet (il y a quelques jours, quelques semaines ou même quelques mois)?

Contrairement à, disons svn status, git status fonctionne presque instantanément, même sur des projets volumineux. J'ai souvent trouvé rassurant tout en apprenant à l'utiliser régulièrement, afin de m'assurer que mon modèle mental de ce qui se passait était exact. Maintenant, je l’utilise surtout pour me rappeler ce que j’ai changé depuis mon dernier commit.

De toute évidence, il est bien plus utile que votre .gitignore soit correctement configuré.

28
Peter Burns

Valider les modifications

Une fois que vous avez édité un fichier, vous devez enregistrer vos modifications dans git. Lorsque vous exécutez cette commande, un message de validation vous sera demandé. Il s’agit d’un simple texte qui indique à tout le monde ce que vous avez modifié.

$ git commit source/main.c

Validera le fichier main.c dans le répertoire ./source/

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

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

La validation ne modifie que votre référentiel local mais pas les référentiels distants. Si vous souhaitez envoyer les validations au référentiel distant, vous devez 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, il s'agit d'un changement, car la validation dans le référentiel central nécessite désormais deux étapes.

27
Adam Davis

Comment vous branchez-vous?

La branche par défaut dans un référentiel git s'appelle master.

Pour créer une nouvelle branche, utilisez

git branch <branch-name>

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

git branch

Si vous voulez changer de branche, vous pouvez utiliser

git checkout <branch-name>

Pour créer une nouvelle branche et y accéder 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 modifications de la branche actuelle, faites

git stash
git stash branch <branch-name>
27
Markus Dulghier

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 pratiquement tous les cas pour obtenir la dernière copie du code à partir du référentiel distant.

21
Jeremy Wall

Le Pro Git free book est définitivement mon préféré, surtout pour les débutants.

20
aldux

Git Magic est tout ce dont vous aurez besoin. Garantie ou argent remis!

18
Andrew

J'ai aussi trouvé que Git Internals était très utile. Il est écrit par Scott Chacon (auteur de Pro Git et responsable du livre de la communauté Git). Ce que j’aime dans Git Internals, c’est se concentrant d'abord sur les concepts, puis sur les commandes , et comme il s'agit d'environ 100 petites pages, il est rapidement digérable.

16
Jordan

Comment fusionnez-vous des branches?

Si vous souhaitez fusionner une branche (par exemple, master à release), assurez-vous que votre branche actuelle est la branche cible dans laquelle vous souhaitez fusionner (utilisez git branch ou git status voir votre branche actuelle).

Puis utiliser

git merge master

(où master est le nom de la branche que vous souhaitez fusionner avec la branche actuelle).

S'il y a des conflits, vous pouvez utiliser

git diff

pour voir les conflits en suspens que vous devez résoudre.

16
Markus Dulghier

Comment voyez-vous l'historique des révisions d'un fichier?

git log -- filename
13

Comment suivre les branches distantes

En supposant qu'il existe un référentiel distant à partir duquel vous avez cloné votre référentiel local et en supposant qu'il existe une branche nommée 'some_branch' sur ce référentiel distant, voici comment la suivre localement:

# 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
12
innaM

Un très bon article pour comprendre le fonctionnement de Git est The Git Parable . Très recommandé!

11
EricSchaefer

Comment comparez-vous deux révisions d'un fichier, ou votre fichier actuel et une révision précédente?

La commande de comparaison est git diff.

Pour comparer 2 révisions d'un fichier:

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

Cela diffère commit1 contre commit2; si vous modifiez l'ordre, les fichiers sont différés, ce qui n'est peut-être pas ce que vous attendez ...

Pour comparer le fichier intermédiaire en cours au référentiel:

$ git diff --staged <file_name>

Pour comparer le fichier non mis en place actuel au référentiel:

$ git diff <file_name>
10
kret

Pourquoi encore un autre howto? Il y en a de très bons sur le net, comme le git guide qui est parfait pour commencer. Il a de bons liens, y compris le git book auquel on peut contribuer (hébergé sur git hub) et qui convient parfaitement à cette tâche collective.

Sur stackoverflow, je préférerais vraiment voir vos astuces préférées!

Le mien, que je n'ai découvert que récemment, est git stash, a expliqué ici , ce qui vous permet de sauvegarder votre travail actuel et de passer à une autre branche.

EDIT: comme le post précédent, si vous préférez vraiment le format stackoverlow avec les messages comme wiki, je supprimerai cette réponse

9
Piotr Lesnicki

Interface utilisateur de la console - Tig

Installation:

apt-get install tig

Usage

Dans un dépôt Git, tapez "tig". Pour afficher un journal interactif, appuyez sur "Entrée" dans n’importe quel journal pour afficher plus d’informations à ce sujet. h à l'aide, qui répertorie les fonctionnalités de base.

Trivia

"Tig" est "Git" à l'envers.

9
Dean Rather

Comment supprimer une branche sur un référentiel distant?

Effectuez un Push-In avec votre télécommande en utilisant : avant le nom de la branche.

git Push Origin :mybranchname

étant Origin le nom de votre télécommande et mybranchname le nom de la branche sur le point d'être supprimée

http://help.github.com/remotes/

8
Felipe Sabino

Comment créer une branche sur un référentiel distant?

En supposant que vous ayez cloné votre référentiel distant à partir d'un référentiel distant unique.

# 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
8
innaM

J'ai commencé avec le fonctionnaire tutoriel Git . Je pense que c'est assez pratique pour les débutants (j'étais et suis toujours un débutant, selon votre définition! Je saisis à peine les makefiles, je n'ai qu'un peu joué avec Apache Subversion, etc.).

8
hasen

Code de vérification

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

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

Où que vous cloniez initialement, c’est par défaut que "git pull" tire.

7
Dean Rather

Modifications push et pull

De manière simplifiée, il suffit de faire git Push et git pull. Les modifications sont fusionnées et en cas de conflit, git vous le fera savoir et vous pourrez le résoudre manuellement.

Lorsque vous appuyez pour la première fois sur un référentiel distant, vous devez créer un git Push Origin master (le maître étant la branche maître). A partir de là, vous ne faites que le git Push.

Balises Push avec git Push --tags.

7
dylanfm
7
gngrwzrd

WRT bonnes interfaces graphiques/interfaces, vous pouvez également vouloir vérifier qgit qui est un visualiseur de référentiel multiplate-forme (Linux/Win32) pour Git et peut également être utilisé comme interface de haut niveau pour le Git le plus courant En fait, il peut être facilement amélioré par des "actions personnalisées" afin que les utilisateurs puissent fournir des actions personnalisées.

5
none

Qu'est-ce que le rebasement?

Explication de base tirée du livre Guide pragmatique de Git - Travis Swicegood

Chapitre III

16 Réécrire l’histoire en rebasonnant

La redistribution des commits est le seul concept de Git qui n’a pas d’équivalent dans le monde traditionnel du contrôle de version. En utilisant git rebase, vous pouvez réécrire l’historique d’un référentiel de différentes manières. C'est l'une des commandes les plus puissantes de Git, ce qui en fait l'une des plus dangereuses.

rebase prend une série de commits (normalement une branche) et les répète par-dessus un autre commit (généralement la dernière validation dans une autre branche). Le commit parent change pour que tous les identifiants de commit soient recalculés. Cela peut causer des problèmes aux autres développeurs qui ont votre code car les identifiants ne correspondent pas.

Il existe une règle simple avec git rebase: utilisez-le autant que vous le souhaitez sur les commits locaux. Une fois que vous avez partagé les modifications avec un autre développeur, le mal de tête n’en vaut généralement pas la peine.

5
Felipe Sabino

Ressource : Vérifiez absolument Gitcasts de Scott Chacon , en particulier le Railsconf parler.

Github est génial et a aussi quelques guides utiles .

5
dylanfm

Ajouter sérieusement le lien présenté dans réponse de Tim dans le message Stack Overflow Configurer le serveur Git avec Msysgit sous Windows .

Il m'a parfaitement expliqué comment configurer Git sous Windows avec msysgit , et constitue un article incroyablement détaillé.

5
Jake

J'ai trouvé ce post très utile pour me lancer. Je dois encore lire le livre et d’autres ressources, mais le message a été utile, comme l’indique le titre, "comprendre conceptuellement git". Je recommande également de suivre le cours Git & GitHub proposé par RubyLearning .

4
tundal45

Un autre élément que je pense vraiment devrait être dans cette liste, probablement très utile pour les débutants:

Ne paniquez pas

Que se passe-t-il si j'ai fait des commits et ensuite j'ai fait quelque chose d'effrayant, comme peut-être un rebasement, et maintenant quelque chose - ou même tout - semble être perdu? (Rebase semble être celui qui attire le plus de gens la première fois. Je me concentre donc dessus. Même si git rebase --abort aide beaucoup, parfois vous constaterez que vous avez raté une édition lors d'une rebase interactive, par exemple, et laissez le rebase finish et maintenant vous voulez récupérer vos vieux trucs, et puis il y a des choses comme filter-branch...)

L'un des principes clés de Git est qu'il ne supprime jamais ce que vous avez commis. ("Quoi, jamais?" "Non, jamais!" "Quoi, jamais?" "Eh bien, presque jamais!") Si vous n'avez pas exécuté git gc, c'est toujours là. Il vous faudra peut-être un peu de temps pour trouver votre travail précédent, mais si vous avez déjà réussi à git commits plus tôt, par exemple, même votre série de commits apparemment anéantis d'une erreur de réassurance tragique est toujours là, normalement pendant au moins un mois. (techniquement, jusqu’à expiration des "reflogs").

Il est important de garder à l'esprit que chaque nom de branche appelle ou désigne un "ID de validation". Ce sont les nombres amusants comme 7cc5272. Beaucoup de choses que vous faites, comme ajouter un nouveau commit à une branche, font en sorte que le nom de la branche pointe vers un nouvel ID de validation. Chaque identifiant de validation a un lien pointant vers un ou plusieurs ID de validation précédents, et c’est ce qui constitue en réalité une "branche" pleine de validations.

L'entrée de rebase parle de "réécriture de l'historique" et des commandes telles que git filter-branch également "réécrit l'historique", mais elles ne le font pas en détruisant l'historique précédent, mais en ajoutant un nouvel historique. Une fois que la nouvelle histoire est en place, git "déplacera les étiquettes" afin que l'histoire ressemble ait changé. Si vous êtes sur votre branche fix-nasty-bug et faites un git rebase et réussissez à détruire des objets, l’étiquette fix-nasty-bug fait maintenant référence à l’épave, mais les versions originales y sont toujours. Rebase en particulier crée une étiquette temporaire (non déplacée, pas une branche) orthographiée ORIG_HEAD qui vous permet de les trouver. La commande filter-branch enregistre également tous les noms d'origine. Dans certains cas, il peut ne pas y avoir de nom évident, mais les commits peuvent toujours être trouvés. Si nécessaire, trouvez-vous un "git guru" et expliquez ce que vous avez fait pour avoir causé l'épave.

(La commande git reflog show peut également vous aider à trouver les ID de validation.)

Si vous avez trouvé ce que vous pensez être tout ou partie de votre travail précédent, essayez:

git log <commit-ID>   # ORIG_HEAD after a bad rebase, for instance
git show <commit-ID>  # or some long SHA1 value you can still see in a window

Si cela semble juste ou utile, nommez-le:

git branch recover-my-stuff ORIG_HEAD

et tout est de retour! En fait, votre mauvaise base et votre travail original sont maintenant dans votre dépôt git "pour toujours" (ou du moins, jusqu'à ce que vous supprimiez les noms des branches et laissez quelques mois s'écouler, puis ils se déchets ramassés). Vous pouvez mettre autant de noms que vous le souhaitez sur autant de commits récupérés. (Les noms de branche sont virtuellement gratuits, sauf que vous encombrez votre sortie git branch et, bien sûr, ils empêchent également les commits d'être récupérés. Vous pouvez également, ou à la place, placer des balises sur des ID de validation spécifiques, si vous préférez.)

4
torek

Très bon article sur la fusion avec des conflits - GitGuys: Fusion avec un conflit - Conflits et résolutions

Le blog est vraiment génial - illustratif, propre et compréhensible. Vaut vraiment le détour.

0
rdamborsky