Git pour les débutants: le guide pratique définitif

Ok, après avoir vu ce post de PJ Hyett , j’ai décidé de sauter à la fin et de partir 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 gérer son compilateur, comprend à un certain niveau ce qu’est un Makefile , et a touché le contrôle de source sans le comprendre très bien.

“Pratique” étant défini comme cette personne ne veut pas entrer dans les détails concernant ce que fait Git en arrière-plan, et ne se soucie même pas (ou sait) que c’est dissortingbué. Vos réponses peuvent 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 ressource “client”.

Alors:

Installation / configuration

  • Comment installer Git
  • Comment configurez-vous Git? Essayez de couvrir Linux, Windows, Mac, pensez à la mentalité «client / serveur».
    • Configurer le serveur GIT avec Msysgit sur Windows
  • Comment créez-vous un nouveau projet / référentiel?
  • Comment le configurez-vous pour ignorer les fichiers (.obj, .user, etc.) qui ne font pas vraiment partie du code?

Travailler avec le code

  • Comment obtenez-vous le dernier code?
  • Comment vérifiez-vous le code?
  • Comment commettez-vous les changements?
  • Comment voyez-vous ce qui n’est pas engagé ou le statut de votre base de code actuelle?
  • Comment détruisez-vous les commits indésirables?
  • Comment comparez-vous deux révisions d’un fichier, ou votre fichier actuel et une révision précédente?
  • Comment voyez-vous l’historique des révisions d’un fichier?
  • Comment gérez-vous les fichiers binarys (visio docs, par exemple, ou des environnements de compilateur)?
  • Comment fusionner des fichiers modifiés en même temps?
  • Comment annuler (annuler ou réinitialiser) un commit?

Marquage, twigment, versions, lignes de base

  • Comment ‘marquer’ ‘tag’ ou ‘libérer’ un ensemble particulier de révisions pour un ensemble de fichiers particulier afin que vous puissiez toujours le récupérer plus tard?
  • Comment tirez-vous une “release” particulière?
  • Comment vous twigz-vous?
  • Comment fusionnez-vous les twigs?
  • Comment résoudre les conflits et compléter la fusion?
  • Comment fusionner des parties d’une twig dans une autre twig?
  • Qu’est-ce qui rebase?
  • Comment suivre les twigs distantes?
  • Comment créer une twig sur un référentiel distant?
  • Comment supprimer une twig sur un référentiel distant?
  • Exemples de stream de travail Git

Autre

  • Décrivez et établissez un lien vers une bonne interface graphique, un plug-in IDE, etc. qui fait de Git une ressource sans ligne de commande, mais indiquez ses limites et son bien-être.
    • msysgit – Plate-forme croisée incluse avec Git
    • gitk – Visionneuse d’historique multi -plateforme, incluse avec Git
    • gitnub – Mac OS X
    • gitx – Visualiseur d’historique Mac OS X
    • smartgit – Cross platform, commercial, beta
    • tig – Console graphique pour Linux
    • qgit – Interface graphique pour Windows, Linux
    • Extensions Git – package pour Windows, inclut une interface graphique conviviale
  • Toute autre tâche courante qu’un débutant devrait connaître?
    • Statut Git vous indique ce que vous venez de faire, quelle twig vous avez et d’autres informations utiles
  • Comment puis-je travailler efficacement avec un ensemble de référentiels de subversion en tant que source de contrôle source?

Autres références du débutant Git

  • Guide Git
  • Livre de Git
  • Magie git
  • Gitcasts
  • Guides GitHub
  • Tutoriel Git
  • Progit – livre de Scott Chacon
  • Git – Cours intensif SVN
  • Git de bas en haut
  • Git prêt
  • gitref.org
  • Git visual cheatsheet

Fouiller dans Git

  • Comprendre Git conceptuellement
  • Git pour les informaticiens (et une autre version )

Je vais parcourir les entrées de temps en temps et les «ranger» de façon à ce qu’elles aient une apparence cohérente et il est facile de numériser la liste – n’hésitez pas à suivre un simple en-tête – brève explication – liste d’instructions – extra info “template. Je vais également créer un lien vers les entrées de la liste de puces ci-dessus afin de les retrouver facilement plus tard.

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

Un repository 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.

Lancez 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 .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 actuel est dans un repository git, lancez simplement git status – si ce n’est pas un référentiel, il signalera “fatal: Not a git repository”

Vous pouvez également lister le répertoire .git et vérifier qu’il contient des fichiers / répertoires similaires aux suivants:

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

Si, pour une raison quelconque, vous souhaitez “dégrader” un repository (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: Ceci détruira tout l’ historique de révision, tous vos tags, tout ce que git a fait. Il ne touchera pas les fichiers “actuels” (les fichiers que vous pouvez actuellement voir), mais les modifications précédentes, les fichiers supprimés, etc. seront irrécupérables!

GUI pour git


Git GUI

Inclus avec git – Exécuter git gui partir de la ligne de commande, et le programme d’ installation Windows msysgit l’ ajoute au menu Démarrer.

Git GUI peut faire la majorité de ce que vous devez faire avec git. Y compris les changements de scène, configurez git et les repositorys, appuyez sur les modifications, créez / extrayez / supprimez des twigs, fusionnez et bien d’autres choses.

Une de mes fonctions préférées est la “ligne de scène” et les raccourcis “stage hunk” dans le menu contextuel, qui vous permet de valider des parties spécifiques d’un fichier. Vous pouvez obtenir la même chose via 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 plates-formes (basée sur Tcl / Tk)

Screenshots | un screencast


GitK

Aussi inclus avec git. Il s’agit d’un visualiseur d’historique git qui permet de visualiser l’historique d’un référentiel (y compris les twigs, leur création et leur fusion). Vous pouvez afficher et rechercher des commits.

Se marie bien avec git-gui.


Gitnub

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

Il est joli et convient à Mac OS X. Vous pouvez rechercher des référentiels. La plus grande critique de Gitnub est qu’elle montre l’histoire de manière linéaire (une seule twig à la fois) – elle ne visualise pas les twigments 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 | repository git


GitX

Entend être un “clone gitk pour OS X”.

Il peut visualiser l’historique des twigments non linéaires, effectuer des commits, afficher des commits de recherche et de recherche, et il a d’autres fonctionnalités intéressantes comme la possibilité de “regarder” rapidement n’importe quel fichier dans une révision (appuyez sur (par glisser-déposer).

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

Le référentiel git original pieter n’a pas été mis à jour récemment (plus d’un an au moment de la rédaction). Une twig plus activement maintenue est disponible sur brotherbard / gitx – elle ajoute “sidebar, fetch, pull, push, add remote, merge, cherry-pick, rebase, clone, clone to”

Télécharger | Screenshots | repository git | Fourche Brotherbard | fourchette laullon


SmartGit

De la page d’accueil:

SmartGit est une interface pour le système de contrôle de version dissortingbué Git et fonctionne sous Windows, Mac OS X et Linux. SmartGit est destiné aux développeurs qui préfèrent une interface utilisateur graphique sur 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 depuis leur site web .

Télécharger


TortoiseGit

TortoiseSVN version Git pour les utilisateurs Windows.

Il porte TortoiseSVN à TortoiseGit La dernière version 1.2.1.0 Cette version peut accomplir des tâches régulières, telles que commettre, afficher le journal, diff deux versions, créer une twig et un tag, créer un correctif, etc. Voir les notes de version pour plus de détails. Bienvenue à consortingbuer à ce projet.

Télécharger


QGit

QGit est une visionneuse graphique basée sur Qt / C ++.

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

Télécharger


gitg

gitg est un visualiseur de git ciblant gtk + / GNOME. L’un de ses principaux objectives est de fournir une expérience utilisateur plus unifiée pour les interfaces git sur plusieurs ordinateurs de bureau. Cela n’écrit pas une application multi-plateforme, mais une collaboration étroite avec des clients similaires pour d’autres systèmes d’exploitation (comme GitX pour OS X).

Caractéristiques

  • Parcourez l’historique des révisions.
  • Gérer les grands référentiels (charge le référentiel Linux, plus de 17000 révisions, moins de 1 seconde).
  • Commit changes.
  • Scène / décompose les mecs individuels.
  • Rétablir les changements.
  • Afficher le diff colorisé des modifications dans les révisions.
  • Parcourir l’arbre pour une révision donnée.
  • Exporter des parties de l’arbre d’une révision donnée.
  • Fournissez toute référence à une commande telle que “git log” pour construire l’historique.
  • Afficher et basculer entre les twigs dans la vue historique.

Télécharger: versions 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 twigs, l’historique et l’état du répertoire de travail.

Les opérations quotidiennes sont faciles: les changements d’étape et de scène avec une case à cocher. S’engager, 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 les captures d’écran semblent être un système d’exploitation open source X git gui.

Télécharger ou source


Fondre

Meld est un outil visuel et de fusion. Vous pouvez comparer deux ou trois fichiers et les modifier sur place (diffs met à jour dynamicment). 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 par Steve Dekorte.

En un coup d’œil, voyez quelles twigs distantes ont des modifications à tirer et les mises en repository locales doivent être modifiées. Les fonctions d’ajout, de validation, de push, d’extraction, de tag et de réinitialisation sont sockets en charge, ainsi que les différences visuelles et la navigation visuelle de la hiérarchie des projets, qui mettent en évidence les modifications et les ajouts locaux.

Gratuit pour 1 repository, 25 $ pour plus.

Télécharger


Sprout (anciennement GitMac)

Se concentre sur la facilité d’utilisation de Git. Comporte une interface utilisateur native Cocoa (mac-like), une navigation rapide dans le référentiel, le clonage, le push / pull, les twigments / fusions, les différences visuelles, les twigs distantes, un access 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 stream de production Git, Sprout est idéal pour les concepteurs et les développeurs, la collaboration en équipe et les utilisateurs avancés et novices.

Télécharger | Site Internet


La 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 Internet


EGit

EGit est un fournisseur Eclipse Team pour le système de contrôle de version Git. Git est un SCM dissortingbué, ce qui signifie que chaque développeur dispose d’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 des outils Eclipse en plus de l’implémentation JGit Java de Git.

Télécharger | Site Internet


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 pour rendre le travail avec Git sur 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 y a aussi un plugin Visual Studio pour utiliser git de Visual Studio.

Télécharger

Un grand merci à dbr pour avoir élaboré sur le git gui.


SourceTree

SourceTree est un client gratuit Mac pour Git, Mercurial et SVN. Construit par Atlassian, les personnes derrière BitBucket, il semble fonctionner aussi bien avec n’importe quel système VC, ce qui vous permet de maîsortingser un seul outil à utiliser avec tous vos projets, quelle que soit leur version. Entièrement équipé et GRATUIT.

Expert-Ready & Feature-pack pour les utilisateurs novices et avancés:

Examinez les modifications intervenantes et entrantes. Cueillette de cerises entre les twigs. Gestion des patchs, rebase, stockage / stockage et bien plus encore.

Télécharger | Site Internet


Eh bien, malgré le fait que vous ayez demandé de ne pas “simplement” créer de liens vers d’autres ressources, il est assez stupide qu’il existe déjà une ressource communautaire (et croissante) très bonne: le Git Community Book . Sérieusement, cette question de plus de 20 questions va être tout sauf concise et cohérente. Le Git Community Book est disponible à la fois en HTML et en PDF et répond à plusieurs de vos questions avec des réponses claires, bien formatées et révisées par des pairs et dans un format qui vous permet de passer directement à votre problème.

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

Comment le configurer pour ignorer les fichiers:

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

Pour ignorer un fichier ou un ensemble de fichiers, vous fournissez un motif. La syntaxe de git est assez simple mais puissante. Il est applicable aux trois fichiers différents que je mentionnerai ci-dessous.

  • Une ligne vide n’ignore aucun fichier, elle est généralement utilisée comme séparateur.
  • Les lignes regardant avec # servent de commentaires.
  • Le ! le préfixe est facultatif et annulera le motif. Tout motif négatif correspondant correspond à des modèles de priorité inférieure.
  • Prend en charge les expressions avancées et les caractères génériques
    • Ex: Le pattern: *. [Oa] ignorera tous les fichiers du repository se terminant par .o ou .a (fichiers object et archive)
  • Si un répertoire a un répertoire se terminant par une barre oblique, git ne fera que correspondre à ce répertoire et aux chemins situés en dessous. Cela exclut les fichiers réguliers et les liens symboliques du match.
  • Une barre oblique principale correspond à tous les fichiers de ce nom de chemin.
    • Ex: Le pattern /*.c correspondra au fichier foo.c mais pas bar / awesome.c

Excellent exemple de la page de manuel de 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 en fonction de vos préférences pour les fichiers qui ne doivent / ne doivent pas être ignorés.

 git add .gitignore 

et commettez quand vous avez terminé.

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

Ajouter / Modifier le fichier $ GIT_DIR / info / exclude dans votre copie de travail, avec vos motifs 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) Ignorer dans toutes les situations, sur votre système:

Les patterns d’ignorance globaux pour votre système peuvent aller dans un fichier nommé comme vous le souhaitez.

Le mien est appelé ~ / .gitglobalignore

Je peux alors faire connaître ce fichier en éditant mon fichier ~ / .gitconfig avec la ligne suivante:

 core.excludesfile = ~/.gitglobalignore 

Vous avez terminé!

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

Comment «taguer» 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 récupérer plus tard?

Utiliser la commande git tag .

Pour simplement “tagger” la révision en cours, il suffit 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 lister les tags actuels, 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 baliser un commit spécifique (précédent), vous faites simplement ..

 git tag [tag name] [revision SHA1 hash] 

Par exemple:

 git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b 

Remarque: par défaut, git crée une balise “allégée” (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 tag (identique à un message de validation, vous pouvez également utiliser l’ -m pour fournir le message de tag sur la ligne de commande). L’utilisation d’une balise annotée crée un object avec son propre identifiant, date, tagger (author) et éventuellement une signature GPG (à l’aide de 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 répertorier les balises avec des annotations, utilisez l’indicateur -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 git-tag (1)

Exemple de workflow avec GIT.

Git est extrêmement flexible et s’adapte bien à tout workflow, mais ne pas appliquer un workflow particulier peut avoir pour effet de rendre difficile la compréhension de ce que vous pouvez faire avec git au-delà du workflow linéaire de sauvegarde. .

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

citant un article du blog: Nous considérons que l’origine / le maître est la twig 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, dans lequel vous effectuez toutes vos modifications en développement, et ne faites que passer en mode maître lorsque le code est dans un état de production:

workflow simple

Maintenant, supposons que vous souhaitiez travailler sur une nouvelle fonctionnalité ou sur le remaniement d’un module. Vous pourriez créer une nouvelle twig, ce que nous pourrions appeler une twig “caractéristique”, ce qui prend 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 twig d’entités en développement. Lorsque tous les bogues sont sortingés après la fusion et que votre code passe tous les tests à l’état solide, vous poussez vos modifications dans Master.

Pendant tout ce processus, vous trouvez un terrible bug de sécurité, qui doit être corrigé immédiatement. Vous pourriez avoir une twig appelée correctifs, qui apportent des modifications plus rapides à la production que la twig normale “développer”.

Vous avez ici une illustration de la façon dont ce stream de travail fonctionnalité / correctif / développement / production peut ressembler (bien expliqué dans l’article de blog, et je le répète, l’article explique le processus de manière beaucoup plus détaillée et beaucoup mieux que moi) .

Exemple de workflow Git

Voici une copie du post de PJ Hyett, car il n’est plus disponible:

Git n’est pas dur

23 novembre 2008

Lorsque nous disons aux gens pourquoi ils doivent utiliser Git plutôt que Subversion, la ligne de conduite est la suivante: «Git fait mieux que Subversion pour Subversion, mais elle fait beaucoup plus que cela.

Le «lot more» comprend un tas de trucs qui font vraiment briller Git, mais cela peut être assez écrasant pour ceux qui viennent d’autres SCM comme Subversion.

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

En supposant que vous ayez installé le logiciel nécessaire et que vous ayez un référentiel distant quelque part, vous récupérerez le code et repousserez 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 feriez-vous à Git:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

Une commande de plus pour y arriver à Git. Cette commande supplémentaire a de grandes implications, mais pour les besoins de cet article, nous ne parlons que d’une seule commande supplémentaire.

Voyez, ce n’est vraiment pas si difficile.

Mise à jour: Je m’en voudrais de ne pas mentionner que l’équivalent de la mise à jour de votre copie locale dans Subversion par rapport à Git est respectivement svn update et git pull . Une seule commande dans les deux cas.

Comment installer Git

Sous Windows:

Installez msysgit

Il y a plusieurs téléchargements:

  • Git: Utilisez cette option sauf si vous avez spécifiquement besoin d’une des autres options ci-dessous.
  • PortableGit: Utilisez-le si vous souhaitez exécuter Git sur un PC sans l’installer sur ce PC (par exemple, exécuter 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’en avez pas besoin.

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

Mac OS X

Utilisez le programme d’ installation de git-osx ou vous pouvez également installer depuis le 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 sous 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 dissortingbutions 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 comstackr Git très facilement à partir des sources. Téléchargez la dernière version de Git en tant que .tar.bz ou .tar.gz depuis http://git-scm.com/ et extrayez-la (double-cliquez sur Finder)

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

Ensuite, dans un terminal, cd à l’endroit où vous avez extrait les fichiers (Running 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 invitera à entrer votre mot de passe (pour sudo ), afin qu’il puisse écrire dans le /usr/local/ , auquel l’utilisateur “root” ne peut accéder que si sudo est requirejs!

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 

Cela installera le binary git dans /usr/local/bin/gitpath/bin/git – vous n’avez donc pas besoin de taper chaque fois que vous devez append dans votre $PATH la ligne suivante dans votre ~/.profile :

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

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

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

Ce script met à jour mon clone local du repository git (localement à ~/work/track/git ), puis configure, installe (à /usr/local/gitgit 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

Supposons que vous tiriez, que vous le fusionniez dans votre code et que vous décidiez de ne pas l’aimer. Utilisez git-log, ou tig, et trouvez le hachage de l’endroit où vous voulez retourner (probablement votre dernier commit avant le pull / merge) copiez le hachage et faites:

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

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

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

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

Comment configurer un référentiel normal est décrit ici – mais comment mettre en place un référentiel d’équipe que tout le monde peut tirer et pousser de et vers?

Utiliser un système de fichiers NFS partagé

En supposant que votre équipe a 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, le plus simple est de démarrer depuis un référentiel local que vous avez déjà utilisé:

 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. Si vous utilisez un compte sans mot de passe, un compte avec un mot de passe ou utilisez authorized_keys dépend vraiment de votre niveau de sécurité requirejs. Jetez un coup d’œ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 ci-dessus.

Après avoir lancé le repository de la même manière que ci-dessus, vous effectuez la poussée initiale comme ceci:

 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? La seule chose qui pourrait arriver en plus est SSH demandant un mot de passe si le compte a un mot de passe. Si vous obtenez 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 

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

  • Qu’est-ce que cette commande a fait?
  • De quelle twig suis-je?
  • Quels changements suis-je sur le sharepoint commettre et est-ce que j’ai 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 à, disons svn status , le svn status git status est presque instantané, même sur les grands projets. J’ai souvent trouvé rassurant d’apprendre que git l’utilisait fréquemment pour m’assurer que mon modèle mental de ce qui se passait était exact. Maintenant, je m’en sers surtout pour me rappeler ce que j’ai changé depuis mon dernier engagement.

De toute évidence, il est beaucoup plus utile que votre fichier .gitignore soit configuré de manière sûre.

Commit Changes

Une fois que vous avez édité un fichier, vous devez valider vos modifications sur git. Lorsque vous exécutez cette commande, il vous demandera un message de validation – qui n’est qu’un simple texte qui indique à tout le monde ce que vous avez modifié.

 $ git commit source/main.c 

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

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

va commettre 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 devrez d’abord les configurer avec git-add, puis valider sans l’option -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 devrez effectuer un push.

 $ git push   # push new commits to the  on the  repository 

Pour quelqu’un venant de CVS ou de SVN, cela change car la validation vers le référentiel central nécessite maintenant deux étapes.

Comment vous twigz-vous?

La twig par défaut dans un référentiel git s’appelle master .

Pour créer une nouvelle utilisation de twig

 git branch  

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

 git branch 

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

 git checkout  

Créer une nouvelle twig et y basculer en une seule étape

 git checkout -b  

Pour supprimer une twig, utilisez

 git branch -d  

Pour créer une twig avec les modifications de la twig en cours, faites

 git stash git stash branch  

Obtenir le dernier code

 $ git pull   # fetches the code and merges it into # your working directory $ git fetch   # fetches the code but does not merge # it into your working directory $ git pull --tag   # same as above but fetch tags as well $ git fetch --tag   # you get the idea 

Cela couvre à peu près tous les cas pour obtenir la dernière copie du code à partir du référentiel distant.

Le livre gratuit Pro Git est certainement mon préféré, surtout pour les débutants.

Git Magic est tout ce dont vous avez besoin. Garanti ou remboursé!

How do you merge twigs?

If you want to merge a branch (eg master to release ), make sure your current branch is the target branch you’d like to merge into (use git branch or git status to see your current branch).

Then use

 git merge master 

(where master is the name of the branch you want to merge with the current branch).

If there are any conflicts, you can use

 git diff 

to see pending conflicts you have to resolve.

I’ve also found Git Internals to be very useful. It is written by Scott Chacon (author of Pro Git, and maintainer of the Git Community Book). What I like about Git Internals is it focuses on the concepts first and then the commands , and being that it is ~100 small pages it is quickly digestible.

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

 git log -- filename 

How to track remote twigs

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 twigs 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 

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

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    

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  

To compare current unstaged file against the repository:

 $ git diff  

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 consortingbute (hosted on git hub) and which is perfect for this collective task.

On stackoverflow, I would really prefer to see your favorite sortingcks !

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

Console UI – Tig

Installation:

 apt-get install tig 

Usage

While inside a git repo, type ‘tig’, to view an interactive log, hit ‘enter’ on any log to see more information about it. h for help, which lists the basic functionality.

Trivia

“Tig” is “Git” backwards.

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 

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.).

How do I delete a branch on a remote repository?

Perform a push in your remote using : before the name of the branch

 git push origin :mybranchname 

being origin the name of your remote and mybranchname the name of the branch about to be deleted

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

Push and pull changes

In an simplified way, just do git push and git pull . Changes are merged and if there’s a conflict git will let you know and you can resolve it manually.

When you first push to a remote repository you need to do a git push origin master (master being the master branch). From then on you just do the git push .

Push tags with git push --tags .

Checking Out Code

First go to an empty dir, use “git init” to make it a repository, then clone the remote repo into your own.

 git clone user@host.com:/dir/to/repo 

Wherever you initially clone from is where “git pull” will pull from by default.