Home
Git Community Book
Contents
1. QQ5b 002Compressing objects 100 1177 1177 rCompressing objects 100 1177 1177 done n 2004 Q01PACK QQ0 000 000 002 000 000 n 355 225 017x 234 235 216K n 302 2005 001 360 204 225 376 330 345 z2673 0037 002Total 2797 delta 1799 reused 2360 delta 1529 n lt 276 255L 273s 005 001W0006 001 0000 Voir le chapitre pr c dent sur le Packfile pour plus d information sur le format de donn e du packfile pr sent dans la r ponse Publier des Donn es Publier des donn es sur les protocoles git et ssh est similaire mais plus simple En gros le client demande une instance de receive pack qui est lanc si le client y a acc s puis le serveur renvoie une nouvelle fois tous les SHAs de r f rence et le client g n re un packfile pour tout ce dont le serveur a besoin g n ralement seulement si ce qui se trouve sur le serveur est un anc tre direct de ce qui doit tre publi et envoie ce packfile en stream vers le serveur ou le serveur peut le stocker sur le disque et construire son index ou le d baller unpack s il contient beaucoup d objets L int gralit de ce processus est r alis par la commande git send pack sur le client qui est appel e par git push et la commande git receive pack du c t du serveur qui est appel e par le processus de connexion ssh ou le daemon git dans le cas d un serveur ouvert a la publication 131
2. Creating Blobs Creating a blob in your Git repository and getting a SHA back is pretty easy The git hash object command is all you ll need To create a blob object from an existing file just run it with the w option which tells it to write the blob not just compute the SHA git hash object w myfile txt 6fF87c4664981e4397625791c8ea3bbb5Ff2279a3 git hash object w myfile2 txt 3bb0e8592a41ae3185ee32266c860714980dbed7 Chapter 7 Fonctionnement Interne et Plomberie The STDOUT output of the command will the the SHA of the blob that was created Creating Trees Now lets say you want to create a tree from your new objects The git mktree command makes it pretty simple to generate new tree objects from git Is tree formatted output For example if you write the following to a file named tmp tree txt 100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 filel 100644 blob 3bb0e8592a41ae3185ee32266c860714980dbed7 file2 and then piped that through the git mktree command Git will write a new tree to the object database and give you back the new sha of that tree cat tmp tree txt git mk tree f66a66ab6a 7bfe86d52a66516ace212efa00felf Then we can take that and make it a subdirectory of yet another tree and so on If we wanted to create a new tree with that one as a subtree we just create a new file tmp newtree txt with our new SHA as a tree in it 100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 filel copy 0
3. Format de Log git config format pretty oneline Autres Options de Configuration Il y a aussi un grand nombre d options int ressantes pour emballer nettoyer merger cr er des branches pour le transport http les diff et plus Si vous voulez personnaliser toutes ces options reportez vous la documentation de git config GIT HOOKS Git Hooks Hooks C t Serveur Reception de Post GIT_DIR hooks post receive Si vous crivez ceci en Ruby vous pourrez obtenir les arguments de cette mani re Chapter 5 Git Avanc rev_old rev_new ref STDIN read split Ou en script bash quelque chose comme a peut fonctionner bin sh lt oldrev gt lt newrev gt lt refname gt update a blame tree while read oldrev newrev ref do echo STARTING oldrev newrev ref for path in git diff tree r oldrev newrev awk print 6 do echo git update ref refs blametree ref path newrev git update ref refs blametree ref path newrev done done Hooks C t Client Pre Commit Lancer vos tests automatiquement avant de committer GIT_DIR hooks pre commit Voici un exemple d un script Ruby qui ex cute des tests RSpec avant de vous permettre de faire un commit html_path spec_results html spec f h html_path f p spec lancer rspec affichier la prograssion sauvegarde le resul 93 Git Community Book 94 affiche combien d erreurs ont t trouv es html open html_path read exa
4. jour l index avec ce nouveau contenu puis au lieu de lancer git commit lancez juste git rebase continue et git continuera d appliquer le reste des patches A n importe quel moment vous pouvez utiliser l option abort pour annuler le processus et retourner au m me tat de mywork qu au d marrage de la recombinaison git rebase abort RECOMBINAISON INTERACTIVE Vous pouvez aussi recombiner rebase les commits interactivement Ceci s utilise souvent pour r crire vos objets commits avant de les publier C est une mani re simple de d couper regrouper et r ordonner les commits avant de les partager avec les autres Vous pouvez aussi utiliser a pour nettoyer les commits que vous r cup rerez chez quelqu un avant de les appliquer localement Si vous voulez modifier interactivement vos commit durant la recombinaison vous pouvez activer le mode interactif en utilisant l option i ou interactive avec la commande git rebase git rebase i origin master Cela lancera le mode interactif de recombinaison avec tous les commits que vous avez cr depuis votre derni re publication ou le dernier merge depuis le d p t d origine 57 Git Community Book 58 Pour voir quels commits seront concern s vous pouvez utiliser la commande log de cette fa on git log github master Quand vous lancerez la commande rebase i vous vous trouverez dans un diteur qui ressemblera a pick fc
5. Sp cification Ordinale Le format suivant vous donnera la Ni me valeur pr c dent une r f rence particuli re Par exemple master 5 vous donnera la Si me valeur avant la r f rence du sommet de master La Carotte Parent Cela vous donnera le Ni me parent d un commit particulier Ce format n est utile que pour les commits de merge les objets commits qui ont plus d un parent masterA2 Sp cification avec le Tilde La sp cification avec le tilde vous donnera le Ni me grand parent d un objet commit Par exemple master 2 vous donnera le premier parent du premier parent du commit vers lequel pointe master C est l quivalent de masterAA Vous pouvez aussi continuer a faire a Les sp cifications suivantes pointent vers le m me commit 67 Git Community Book 68 master AAAAAA master 3A 2 master 6 Pointeur de Tree Cela facilite la recherche d un commit en partant de l arbre vers lequel il pointe Si vous avez besoin du sha vers lequel un commit pointe vous pouvez ajouter la sp cification M tree la fin de celui ci masterA tree Sp cification de Blob Si vous voulez le sha d un blob en particulier vous pouvez ajouter le chemin du blob la fin de l arborescence comme ceci master chemin vers Le fichier Les Suites Pour terminer vous pouvez sp cifier une suite de commits avec la sp cification de suite Par exemple vous pourrez obtenir les commits entre 7b593b5 et 5Ibeal avec 5lbeal
6. Une note sur le message du commit Bien que a ne soit pas obligatoire c est une bonne id e de commencer le message du commit avec une courte ligne moins de 50 caract res qui r sume le changement suivi d une ligne blanche puis d une description plus compl te Les outils qui transforment les commits en mail par exemple utilisent la premi re ligne du commit pour le Sujet du mail et le reste pour le contenu Git surveille le contenu et pas les fichiers Beaucoup de syst me de contr le de version fournisse une commande add qui demande au syst me de surveiller les changements dans un nouveau fichier La commande add de Git fait quelque chose de plus simple et de plus puissant git add est utilis a la fois pour les nouveaux fichiers et les fichiers nouvellement modifi s Dans les 2 cas il prend une capture des fichiers fournis et assemble leur contenu dans l index pr t tre inclus dans le prochain commit USAGE BASIQUE DES BRANCHES ET DES MERGES Un seul d p t git peut maintenir de nombreuses branches de d veloppement Pour cr er une nouvelle branche nomm e experimental utilisez git branch experimental Chapter 3 Utilisation Basique Si vous lancez maintenant git branch Vous obtiendrez la liste de toutes les branches existantes experimental master La branche experimental est celle que vous venez de cr er et la branche master est la branche par d faut qui a t cr e automatiquement pour v
7. regardons rapidement comment ils travaillent ensemble Si nous avons un simple projet avec la structure de dossiers suivante gt tree README lib l inc tricks rb mylib rb 2 directories 3 files Et si nous committons ce projet sur un d p t Git il sera repr sent comme a Git Community Book 98ca9 e8455 CRIE bc52a mylib rb b70 8 0adla ue que Vous pouvez voir que nous avons cr un objet tree pour chaque r pertoire pour la racine aussi et un objet blob pour chaque fichier Ensuite nous avons un objet commit qui pointe vers la racine afin que nous puissions r cup rer l apparence du projet quand il a t committ Chapter Introduction L Objet Tag 49e11 CHE type tagger my tag message that explains this tag Un objet tag contient un nom d objet simplement nomm object un type d objet un nom de tag le nom de la personne taggeur qui a cr le tag et un message qui peut contenir une signature comme on peut le voir en utilisant git cat file git cat file tag v1 5 0 object 437b1b20df4b356c9342dac8d38849f24ef44F27 type commit tag v1 5 0 tagger Junio C Hamano lt junkio cox net gt 1171411200 0000 GIT 1 5 8 sesse BEGIN PGP SIGNATURE Version GnuPG v1 4 6 GNU Linux iD8DBQBF LGqwMbZpPMRmM5oRAURiAJ9ohBLd7s2kqjkKlq lqqC57SbnmzQCdG4ui nLE L9aUXdWeTFPron96DLA 2E 0 Git Community Book Voyez
8. 114 git show ref heads cut d refs heads core tutorial refs heads maint refs heads tutorial 2 refs heads tutorial fixes f2 grep v Arefs heads master Et ensuite nous pouvons demander voir tous les commits visibles depuis master mais pas des autres sommets gitk master not C git show ref heads cut d f2 grep v refs heads master videmment des variations illimit s sont possibles par exemple pour afficher tous les commits visible de certains sommets mais pas de ceux contenant des tags dans le d p t gitk C git show ref heads not C git show ref tags Voir git rev parse pour plus d explications sur la syntaxe de s lection de commits comme not update ref L INDEX GIT L index est un fichier binaire g n ralement gard dans git index qui contient une liste ordonn es de chemins de fichiers chacun avec les permissions et le SHAI de l objet blob git Is files peut vous montrer le contenu de l index git ls files stage 100644 63c918c667fa005ff12ad89437f2fdc89926e21c gitignore 100644 5529b198e8d14decbe4ad99db3f7fb632de0439d mailmap 100644 GFF87c4664981e4397625791c8ea3bbb5f2279a3 COPYING 100644 a37b2152bd26be2c2289e1f57a292534a51a93c7 Documentation gitignore Chapter 7 Fonctionnement Interne et Plomberie 100644 fbefe9a45b00a54b58d94d06eca48b03d40a50e0 Documentation Makefile 100644 2511aef8d89ab52beSec6a5e46236b4b6bcd 7ea xdiff x
9. cost bob bob La commande polyvalente git show peut aussi Etre utilis e pour examiner un objet tree mais git Is tree vous donnera plus de d tails Si nous avons le SHAI d un tree nous pouvons le d tailler comme ceci git ls tree fb3a8bdd0ce 100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c gitignore 100644 blob 5529b198e8d14decbe4ad99db3f7 fb632de0439d mailmap 100644 blob 6ff87c4664981e4397625791c8ea3bbb5f2279a3 COPYING 040000 tree 2fb783e477100ce076f6bf57e4a6f026013dc745 Documentation 100755 blob 3c 032cec592a765692234f1cba47dfdcc3a9200 GIT VERSION GEN 100644 blob 289b0460443c0647624607d471289b2c7dcd470b INSTALL 100644 blob 4eb463797adc693dc168b926b6932fF53f17d0b1 Makefile 100644 blob 548142c327a6790f f8821d67c2eelef f7a656b52 README Comme vous pouvez le voir un objet tree contient une liste d entr es chacune avec un mode un type d objet un nom SHAI un nom le tout tri avec le nom L objet tree repr sente le contenu d un unique dossier Chapter Introduction Un objet r f renc par un tree peut tre un blog repr sentant le contenu d un fichier ou un autre tree repr sentant le contenu d un sous r pertoire Puisque les trees et les blobs comme les autres objets sont nomm s par le hash SHAI de leur contenu 2 trees ont le m me nom SHAI si et seulement si leur contenu en incluant r cursivement le contenu de tous les sous r pertoires est identique Cela permet git de d terminer rapidement
10. jar sbejar gmail com Scott Chacon schacon gmail com Sergei Organov osv javad com Shawn Bohrer shawn bohrer gmail com Shawn O Pearce spearce spearce org Steffen Prohaska prohaska zib de Tom Prince tom prince ualberta net William Pursell bill pursell gmail com Yasushi SHOJI yashi atmark techno com MAINTAINER EDITOR Bug this guy Scott Chacon schacon gmail com Chapter Chapter Introduction Introduction BIENVENUE SUR GIT Bienvenue sur Git le contr le de version rapide et distribu Ce livre sert de point de d part pour gens qui veulent se familiariser Git et l apprendre aussi vite et rapidement que possible Ce livre commencera par vous expliquer comment Git stocke les donn es afin de vous montrer pourquoi c est si diff rent des autres outils de contr le de version VCS Cela devrait prendre environ 20 minutes Apr s nous verrons l Utilisation Basique de Git les commandes que vous utiliserez 90 du temps Cela devrait vous donner une bonne base pour utiliser Git confortablement pour a plupart des choses que vous ferez avec Cette section devrait vous occuper pendant environ 30 minutes de lecture Git Community Book Ensuite nous passerons l Utilisation Interm diaire de Git des choses un peu plus compliqu es mais qui peuvent remplacer les commandes basiques que vous aurez vu dans la premi re partie Cela sera surtout des astuces et des commandes qui paraitront plus naturelles
11. 2 23 11 nothing layout book_index_template html 3 7 7 nothing layout chapter_template html 4 3 3 nothing script pdf rb 5 unchanged 121 0 text 14_Interactive_Rebasing _ Interactive_Rebasing markdown Maintenant nous voyons que les 4 premiers fichiers sont assembl s et que le dernier ne l est pas encore Ces informations sont simplement une compression de l affichage obtenu avec la command git status git status On branch master Changes to be committed use git reset HEAD lt file gt to unstage 62 Chapter 4 Usage Interm diaire modified assets stylesheets style css modified layout book_index_template html modified layout chapter_template html modified script pdf rb Changed but not updated Cuse git add lt file gt to update what will be committed modified text 14_Interactive_Rebasing _ Interactive_Rebasing markdown FR HR HR RHR HHH HR Il y a quelques options utiles dans ce mode d ajout interactif comme retirer des fichiers de l index 3 revert ajouter des fichier non suivis 4 add untracked et voir les diff rences 6 view diff Ces options sont assez faciles comprendre Cependant il y a une commande plut t cool qui demande des explications l assemblage de patches 5 patch Si vous tapez 5 ou p dans le menu git vous montrera vos diff rences patch par patch ou morceau par morceau et vous demandera si vous voulez assembler chacun d eux De cette fa on vous p
12. Des exemples de ce genre d utilisation peut tre de la documentation automatiquement g n r e ou des choses dans ce style Si vous voulez cr er une nouvelle branche qui n utilise pas la base du code actuelle comme parent vous pouvez cr er une branche vide comme ceci git symbolic ref HEAD refs heads nouvellebranche rm git index git clean fdx lt travailler gt git add vos fichiers git commit m Premier commit 8l Git Community Book MODIFIER VOTRE HISTORIQUE La recombinaison interactive est une mani re simple pour modifier des commits individuels La commande git filter branch est une bonne fa on de faire des commits en masse BRANCHES ET MERGES AVANC S Trouver de l aide pour r soudre les conflits durant un merge Tous les changements que git peut merger automatiquement sont d j ajout s l index donc git diff ne vous montre que les conflits Il a une syntaxe peu commune git diff diff cc file txt index 802992c 2b60207 0000000 a file txt b file txt 1 1 1 1 1 5 t lt lt lt lt lt lt lt HEAD file txt Hello world Goodbye gt gt gt gt gt gt gt 7 976da35a11db4580b80ae27e8d65caf5208086 file txt Souvenez vous que le commit qui sera effectu apr s que nous ayons r solu ce conflit aura 2 parents l un sera le sommet de la branche courante HEAD et l autre sera le sommet de la branche qui s occupe du merge stock e temporairement dans MERGE_HEAD 82 Chapter 5
13. Introduction Le R pertoire de Travail Le r pertoire de travail de Git est le r pertoire qui contient la version courante des fichiers sur lesquels vous travaillez Les fichiers de ce r pertoire sont souvent effac s ou remplac s par Git quand vous changez de branche c est tout fait normal Tout votre historique est stock dans votre r pertoire Git le r pertoire de travail est simplement une version temporaire de votre projet o vous modifier les fichiers jusqu votre prochain commit L INDEX GIT L index Git est une zone d assemblage entre votre r pertoire de travail et votre d p t Vous pouvez utiliser l index pour construire un groupe de changements qui seront committ ensemble Quand vous cr ez un commit ce qui se trouve dans l index est ce qui est committ et pas ce qui se trouve dans le r pertoire de travail A l Int rieur de l Index La fa on la plus simple de voir ce qu est l index est d utiliser la commande git status Quand vous lancez git status vous pouvez voir quels fichiers sont assembl s actuellement dans l index quels sont ceux modifi s mais pas assembl s et ceux qui ne sont pas suivis gt git status On branch master Your branch is behind origin master by 11 commits and can be fast forwarded Changes to be committed Cuse git reset HEAD lt file gt to unstage modified daemon c Git Community Book Changed but not updated Cuse git add lt file
14. The Git Tutorial pt 2 e My Git Workflow blog post LE MODELE OBJET GIT SHA Toutes les informations n cessaires pour d crire l historique d un projet sont stock es dans des fichiers r f renc s par un nom d objet de 40 caract res qui ressemble quelque chose comme a Gff87c4664981e4397625791c8ea3bbb5f2279a3 Partout dans Git vous trouverez ces cha nes de 40 caract res Dans chaque situation le nom est calcul en prenant le hash SHAI repr sentant le contenu de l objet Le hash SAHI est une fonction de hash cryptographique Ce que cela signifie pour nous c est qu il est virtuellement impossible de trouver 2 objets diff rents avec le m me nom Cela de nombreux avantages parmi lesquels e Git peut rapidement savoir si 2 objets sont les m mes ou non juste en comparant les noms e Puisque le nom des objets sont calcul s de la m me fa on dans chaque d p t le m me contenu stock dans des d p ts diff rent sera toujours stock avec le m me nom e Git peut d tecter les erreurs quand il lit un objet en v rifiant que le nom de l objet est toujours le hash SHAI de son contenu Git Community Book Les Objets Chaque objet se compose de 3 choses un type une taille et le contenu La taille est simplement la taille du contenu le contenu d pend du type de l objet et il y a 4 types d objets diff rents blob tree commit et tag Un blog est utilis pour stocker les donn es d un fichier il
15. a termin d examiner le tree point par le commit il r cup re le prochain parent GET git myproject git objects bd 71cad2d597d0f1827d4a3f67bb96a646F02889 200 Maintenant dans ce cas le commit qui revient ressemble a tree b4cc0Ocf8546edd4fcf29defc3aec14de53e6cf8 parent ab04d884140f 7b0cf8 amp bbf86d6883869F16a46f65 author Scott Chacon lt schacon gmail com gt 1220421161 0700 committer Scott Chacon lt schacon gmail com gt 1220421161 0700 added chapters on the packfile and how git stores objects et vous pouvez voir que le parent ab 4d88 est l o pointe la branche courante Donc nous avec r cup rer r cursivement ce tree puis arr ter puis que nous avons r cup rer tout ce qui nous manquait jusqu ce point Vous pouvez forcer Git verifier par deux fois que nous avons tout ce qu il nous avec l option recover Voir git http fetch pour plus d informations Si la r cup ration de l un des objet seul choue Git t l chargement automatiquement les index des packfiles pour retrouver le sha n cessaire puis t l chargera ce packfile Si vous avec un serveur git qui fournit des d p t de cette fa on il est important d impl menter un hook de post receive qui ex cute la commande git update server info chaque mise jour pour viter les confusions Chapter 7 Fonctionnement Interne et Plomberie R cup ration des Donn es avec Upload Pack Pour les protocoles plus intelligents la r cup ration
16. avec la commande git reset hard HEAD Ou si vous avez d j committ le merge que vous voulez balancer git reset hard ORIG_HEAD Cependant cette derni re commande peut tre dangereuse dans certains cas ne balancez jamais un commit si ce commit tait lui m me le merge d une autre branche en faisant a vous risqueriez de rendre confus les prochains merges Avance rapide des merges Il y a un cas sp cial non mentionn plus t t qui est trait diff remment Normalement un merge est un commit avec 2 parents un pour chacune des 2 lignes de d veloppement qui seront merg es Cependant si la branche courante n a pas diverg de l autres donc tous les commit pr sent dans la branche courant sont d j contenus dans l autre branche alors git ne fait qu une avance rapide le sommet head de la branche courante est avanc jusqu au point du sommet de la branche merger sans qu aucun commit ne soit cr 31 Git Community Book 32 ANALYSER L HISTORIQUE GIT LOG La commande git log vous montrera des listes de commits Tout seul elle vous montrera les commits visible depuis le commit parent de votre version courante mais vous pouvez faire des requ tes plus sp cifiques git git git git git git git git A TAA LA LA TAA LA LA git log log log log log log log log log V2 Diss commits depuis non visible depuis v2 5 test master commits visibles depuis master mais pas test master
17. cr ation d un merge three way Nous avons vu dans lt lt conflict resolution gt gt que durant le merge l index peut stocker de multiples version d un m me fichier appel s stages La troisi me colonne dans la sortie de git Is files ci dessus est le num ro du stage et prendra une valeur autre que 0 pour les fichiers avec des conflits de merge 115 Git Community Book 116 L index est donc un sorte de zone d assemblage temporaire qui contient le tree sur lequel vous tes en train de travailler LE PACKFILE Ce chapitre explique en d tails au bit pr s comment le packfile et les fichier d index de pack sont format s L Index Packfile Premi rement nous avons l index packfile qui est simplement juste une s rie de marque pages vers le packfile Il existe 2 versions de l index packfile version qui est celle par d faut dans les version de Git ant rieures 1 6 et la version 2 qui est celle par d faut depuis Git v1 6 et qui peut tre lue par Git jusqu la v1 5 2 et qui a aussi tait port e sur la v1 4 4 5 sur vous travaillez toujours dans la s rie 1 4 La version 2 inclue un checksum CRC pour chaque objet afin que les donn es compress es puissent tre copi es directement entre les pack durant les re package sans se retrouver avec de donn es corrumpues non d tect es Les index de version 2 peuvent aussi s occuper de packfiles sup rieurs 4Go Chapter 7 Fonctionnement Interne et Plomberie
18. d objets est bien plus efficace Un socket est ouvert soit par ssh ou sur le port 9418 dans ce cas avec le protocole git et la commande git fetch pack sur le client commence communiquer avec un processus fork de la commande git upload pack sur le serveur Puis le serveur va dire au client quels SHAs il a pour chaque r f rence et le client devinera ce qu il besoin et lui r pondra avec la liste des SHAs qu il veut et de ceux qu il a d j A ce moment le serveur va g n rer un packfile avec tous les objets que le clients a besoin et va commencer l envoyer en stream au client Regardons un exemple Le client se connecte et envoie l ent te de requ te La commande de clonage git clone git myserver com project git produit la requ te suivante Q032git upload pack project git 0 host myserver com 000 Les 4 premiers bits contiennent la longueur hexad cimale de la ligne en incluant ces 4 premiers bits et le retour chariot s il est pr sent Ensuite viennent la commande et les arguments Suivi par un bit nul puis les informations du host La requ te se termine par un bit nul Sur le serveur la requ te est analys es et transform e en un appel git upload pack git upload pack path to repos project git 129 Git Community Book 130 Ceci retourne imm diatement les informations du d p t 007c74730d410fcbh6603ace96f1dc55ea6196122532d 003e7d1665144a3a975c05f1f43902ddaf 84e784dbe 003d5a3f6be755bbb7deae
19. de recombinaison 75 Git Community Book 76 MAINTENIR GIT Assurer une bonne performance Sur les d p ts de grande taille git n cessite une compression pour viter que les informations de l historique prennent trop d espace sur le disque et en m moire Cette compression n est pas effectu e automatiquement Vous devrez donc l occasion lancer git gc git gc pour re compresser l archive Cela peut prendre beaucoup de temps donc vous pr f rerez peut tre lancer git gc quand vous ne travaillez pas sur autre chose Assurer la fiabilit La commande git fsck lance une s rie de v rification de consistance du d p t et rapporte les probl mes Cela peut aussi prendre un peu de temps L avertissement le plus courant concerne les objets dangling suspendus git fsck dangling commit 7281251ddd2a61e38657c827739c57015671a6b3 dangling commit 2706a059f258c6b245f298dc4f f2ccd30ec21a63 dangling commit 13472b7c4b80851a1bc551779171dcb03655e9b5 dangling blob 218761f9d90712d37a9c5e36f406f92202db07eb dangling commit bf093535a34a04d35731aa2bd90fe6b176302F14F dangling commit 8e4bec7f2ddaa268bef999853c25755452100f8e dangling tree d5Qbb86186bf27b681d25af89d3b5b68382e4085 dangling tree b24c2473f1fd3d91352a624795be026d64c8841f Chapter 4 Usage Interm diaire Les objets suspendus ne posent aucun probl mes Au pire ils prennent un petit peu plus d espace disque Ils servent parfois de solution de dernier secours pour r cup rer
20. des phrases avec la commande git grep Il est aussi possible de le faire avec la commande grep unix mais vous pouvez faire des recherches sur vos version pr c dentes avec git grep sans avoir a les rapatrier Par exemple si je veux voir tous les endroits qui appellent xmmap dans mon d p t git git je pourrai lancer a P J qui app P pot git git JE p git grep xmmap configi c contents xmmapCNULL contents_sz PROT_READ ditt vc s gt data xmmap NULL s gt size PROT_READ MAP_PRIVATE fd Q git compat util h extern void xmmap void start size_t length int prot int fla read cache c mmap xmmapCNULL mmap_size PROT_READ PROT_WRITE MAP_PRIVATE refs c Log_mapped xmmapCNULL mapsz PROT_READ MAP_PRIVATE logfd shal_file c map xmmapCNULL mapsz PROT_READ MAP_PRIVATE fd shal_file c idx_map xmmapCNULL idx_size PROT_READ MAP_PRIVATE fd Q shal_file c win gt base xmmapCNULL win gt len shal_file c map xmmapCNULL size PROT_READ MAP_PRIVATE f shal_file c buf xmmapC NULL size PROT_READ MAP_PRIVATE fd wrapper c void xmmap void start size_t length Si je veux aussi voir le num ro de ligne de chacun de ces r sultats je peux ajouter l option n gt git grep n xmmap config c 1016 contents xmmapCNULL contents_sz PROT_READ diff c 1833 s gt data xmmapC NULL s gt size PROT_READ MAP_PRIVATE fd git compat util h 291 extern void xmmap void star
21. des travaux perdus CONFIGURER UN D P T PUBLIAUE En supposant que vous avez votre d p t personnel dans le dossier proj nous allons cr er un nouveau clone de ce d p t et pr venir git daemon qu il est destin tre publique git clone bare proj proj git touch proj git git daemon export ok Le dossier proj git obtenu contient un d p t git nu bare il contient juste le contenu du r pertoire git sans aucun autres fichiers r cup r s autour de ce dossier Ensuite copiez proj git sur le serveur o vous allez h berger votre d p t publique Vous pouvez utiliser scp rsync ou ce qui vous convient le plus Exporter un d p t git avec le protocole git C est la m thode la plus utilis e Si quelqu un d autre s occupe de l administration de votre serveur il devrait vous indiquer dans quel r pertoire mettre votre d p t et sur quelle adresse git vous pourrez le r cup rer Sinon vous devez d marrer git daemon il ecoutera le port 9418 Par d faut il autorise les acc s tout ce qui ressemble un r pertoire git et qui contient le fichier magique git daemon export ok Si vous ajoutez le chemin de quelques dossiers en options de git daemon il restreindra les exportation en ne tenant compte que de ces dossiers 77 Git Community Book 78 Vous pouvez aussi lancer git daemon comme service inetd regardez le manuel de git daemon man git daemon particuli rement les exemples pour plus d in
22. ensemble Donc si vous sortez du premier diteur de la mani re suivante pick fc62e55 added file_size squash 9824bf4 fixed little thing squash 21d80a5 added number to log squash 76b9da6 added the apply command squash c264051 Revert added file_size not implemented correctly vous devrez cr er un nouveau message de commit partir de a This is a combination of 5 commits The first commit s message is added file_size This is the 2nd commit message fixed little thing This is the 3rd commit message added number to log This is the 4th commit message added the apply command This is the 5th commit message 59 Git Community Book Revert added file_size not implemented correctly This reverts commit fc62e5543b195f18391886b9f663d5a7eca38e84 Une fois que vous aurez dit cette partie en un seul message et quitt l diteur le commit sera sauvegard avec votre nouveau message Si vous avec s lectionn edit la m me chose se passera mais un pause sera marqu entre chaque commit pour vous donner la main avec une ligne de commande afin que vous puissiez modifier le commit ou son contenu Par exemple si vous voulez d couper un commit vous s lectionnerez edit pour ce commit pick fc62e55 added file_size pick 9824bf4 fixed Little thing edit 21d80a5 added number to log pick 76b9da6 added the apply command pick c264051 Revert added file_size not implemented correctly RY
23. gt to update what will be committed modified grep c modified grep h Untracked files Cuse git add lt file gt to include in what will be committed blametree blametree init git gui git citool RHR HR HH HHH HH Si vous effac compl tement l index vous ne perdrez g n ralement aucune information tant que vous avez le nom du tree qui est d crit Et avec a vous devriez avoir un bonne compr hension des bases de ce que Git fait en arri re plan et pourquoi il est diff rent de la plupart des autres syst mes de contr le de version Ne vous inqui tez pas si vous n avez pas encore tout compris nous reviendrons sur tous ces point dans les prochaines parties du livre Maintenant nous sommes pr ts a installer configurer et utiliser Git Chapter 2 Chapter 2 Le Commencement Le Commencement INSTALLER GIT Installer depuis le Code Source Rapidement sur un syst me Unix vous pouvez t l charger le code source de Git depuis la Page de T l chargement de Git puis d rouler l installation de cette fa on make prefix usr all avec votre utilisateur make prefix usr install avec l utilisateur root Vous aurez besoin des librairies expat curl zlib et openssl install es normalement part expat ces librairies devraient d j se trouver sur votre syst me Git Community Book 20 Linux Si vous utilisez Linux vous devez pouvoir installer Git facilement depuis le gestionnaire de p
24. inattendus par exemple si la branche que vous publiez est l actuelle branche de travail sur le d p t publique Comme avec git fetch vous pouvez aussi rajouter des options de configuration pour vous permettre d aller plus rapidement par exemple apr s cat gt gt git config lt lt EOF remote public repo url ssh yourserver com you proj git EOF vous devriez pouvoir effectuer les op rations pr c dentes avec juste git push public repo master Voir les explications des options remote url branch remote et remote push dans git config pour plus de d tails Que faire quand une publication choue Si une publication ne se termine pas avec une avance de la branche distante alors elle chouera avec un message d erreur comme celui ci error remote refs heads master is not an ancestor of local refs heads master Maybe you are not up to date and need to pull first error failed to push to ssh yourserver com you proj git Cela peut arriv par exemple si Chapter 3 Utilisation Basique vous avez utilis git reset hard pour effacer un commit d j publi ou vous avez utilis git commit amend pour remplacer un commit d j publi ou vous avez utilis git rebase pour recombiner un commit d j publi Vous pouvez forcer un git push effectuer quand m me la mise jour en rajoutant le pr fixe au nom de la branche git push ssh yourserver com you proj git mas
25. qu il a besoin Chapter 7 Fonctionnement Interne et Plomberie Par exemple si vous demandez de r cup rer la branche master il verra que master pointe sur 32aae7ae et que votre master pointe sur ab 4d88 donc vous aurez besoin de 32aae7ae Vous r cup rez cet objet CONNECT http myserver com GET git myproject git objects 32 aae7aef7a412d62192f710f2130302997ec883 200 et il ressemble a tree aa176fb83a47d00386be237b450 fb9dfb5be251a parent bd71cad2d597d f1827d4a3f67bb96a646F02889 author Scott Chacon lt schacon gmail com gt 1220463037 0700 committer Scott Chacon lt schacon gmail com gt 1220463037 0700 added chapters on private repo setup scm migration raw git donc maintenant il r cup re le tree aa176fb8 GET git myproject git objects aa 176fb83a47d00386be237b450fb9dfb5be251a 200 qui ressemble a 100644 blob 6ffF87c4664981e4397625791c8ea3bbb5f2279a3 COPYING 100644 blob 97b51a6d3685b093cfb345c9e79516e5099a13fb README 100644 blob 9d1b23b8660817e4a74006f15fae86e2a508c573 Rakefile donc il r cup re ces objets GET git myproject git objects 6f fF87c4664981e4397625791c8ea3bbb5f2279a3 200 GET git myproject git objects 97 b51a6d3685b093cfb345c9e79516e5099a13fb 200 GET git myproject git objects 9d 1b23b8660817e4a74006f15fae86e2a508c573 200 127 Git Community Book 128 Curl est utilis pour cette op ration et plusieurs thread parall les sont ouverts pour acc lerer ce processus Quand il
26. s agit en g n ral d un fichier Un tree est comme un r pertoire il r f rence une liste d autres tree et ou d autres blobs i e fichiers et sous r pertoires e Un commit pointe vers un unique tree et le marquant afin de repr senter le projet un certain point dans le temps Il contient des m ta informations propos de ce point dans le temps comme le timestamp l auteur du contenu depuis le dernier commit un pointeur vers le ou les dernier s commit s etc Un tag est une mani re de repr senter un commit sp cifique un peu sp cial Il est normalement utilis pour tagger certains commits en tant que version sp cifique ou quelque chose comme a La quasi totalit de Git est construit autour de la manipulation de cette simple structure de 4 types d objets diff rents C est comme un mini syst me de fichier qui se situe au dessus du syst me de fichier de votre ordinateur Diff rences avec SVN Il est important de noter que ce syst me est tr s diff rent des autres outils de contr le de version SCM dont vous tes familier Subversion CVS Perforce Mercurial et les autres utilisent tous un syst me de stockage de Delta ils stockent les diff rences entre un commit et le suivant Git ne fait pas a il stocke une vue instantan e de la repr sentation de tous les fichiers de votre projet dans une structure hi rarchis e chaque fois que vous faites un commit C est un concept tr s important pour c
27. s effondreront apr s quoi git diff ne montrera plus par d faut de diff rence pour ce fichier Chapter 5 Git Avanc Merge Multiples Vous pouvez combiner plusieurs branches en m me temps en les listant simplement dans la m me commande git merge Par exemple git merge scott master rick master tom master est l quivalent de git merge scott master git merge rick master git merge tom master Subtree Il ya des moments o vous voulez inclure le contenu d un projet d velopp ind pendamment dans votre projet Vous pouvez juste r cup rer le code de cet autre projet tant que les chemins ne rentrent pas en conflit Les probl mes surviennent quand il y a des fichiers en conflit Les candidats potentiels sont les Makefiles et les autres noms de fichiers standardis s Vous pouvez merger ces fichiers mais ce n est pas forc ment ce que vous voulez faire Une meilleure solution pour ce probl me peut tre de merger le projet dans un sous r pertoire Mais la strat gie de merge ne supporte la r cursivit donc la simple r cup ration des fichiers ne fonctionnera pas Vous voudrez alors utiliser la strat gie de merge subtree qui vous aidera dans cette situation Dans cet exemple disons que vous avez un d p t dans path to B si vous voulez a peut aussi tre une adresse URL Vous voulez merger la branche master de ce d p t dans le sous r pertoire dir B de la branche actuelle Voici la s quence de command
28. tail de l impl mentation du packfile se trouve dans le chapitre Packfile disponible un peu plus loin dans ce livre NAVIGATION DANS LES OBJETS GIT Nous pouvons demander git des informations propos d un objet particulier avec la commande cat file Vous pouvez utilise le SHA partiel pour viter de saisir les 40 caract res 109 Git Community Book 110 git cat file t 54196cc2 commit git cat file commit 54196cc2 tree 92b8b694f fb1675e5975148e1121810081dbdffe author J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 initial commit Un tree peut r f rencer un ou plusieurs objets blob chacun correspondant un fichier En plus un tree peut aussi r f rencer d autres objets tree cr ant ainsi une hi rarchie de dossier Vous pouvez examiner le contenu de n importe quel tree en utilisant Is tree souvenez vous qu une portion suffisamment longue du SHAI fonctionnera aussi git ls tree 92b8b694 100644 blob 3b18e512dba 9e4c8300dd 8aeb37f8e728b8dad file txt Nous pouvons voir que ce tree contient un fichier Le hash SHAI est une r f rence aux donn es de ce fichier git cat file t 3b18e512 blob Un blob n est qu un fichier de donn e qui peut tre examin avec cat file git cat file blob 3b18e512 hello world Notez qu il s agit ici des donn es de l ancien fichier donc l objet que git appelle dan
29. transf rer des donn es R cup ration des Donn es avec HTTP Git utilise un protocole un peu plus fragile quand il r cup re des donn es sur une adresse http https Dans ce cas toute la logique se d roule du c t client Le serveur ne requiert pas de configuration sp ciale n importe quel serveur web statique fonctionnera si le dossier git que vous r cup rez est dans un chemin accessible depuis le serveur web Afin de faire fonctionner tout a vous devez lancer une simple commande sur le d p t du serveur chaque fois que quelque chose est mis jour git update server info met jour les objects info packs et les fichiers d info refs pour afficher quelles r f rences et packfiles sont disponibles puisque vous ne pouvez pas faire une liste avec http Quand cette commande est lanc e le fichier objects info packs ressemblera quelque chose comme a P pack ce2bd34abc3d8ebc5922dc81b2e1f30bf17c10cc pack P pack 7ad5f5d05f5e20025898c95296fe4b9c861246d8 pack Donc si la r cup ration fetch ne peut pas trouver un fichier seul il peut essayer de le chercher dans ces packfiles Le fichier info refs ressemblera quelque chose comme a 184063c9b594F8968d61a686b2F6052779551613 refs heads development 32aae7aef7a412d62192F710F2130302997ec883 refs heads master Quand vous faite une r cup ration fetch sur ce d p t elle commencera par ces r f rences et parcourera les objets commits jusqu que le client ait tous les objets
30. une fois que vous conna trez les commandes de base Une fois que vous aurez ma tris tout a nous nous lancerons dans le Git avanc les commandes que la plupart des gens n utilisent pas tr s souvent mais qui peuvent tre tr s utiles dans certaines situations Apprendre ces commandes devrait arrondir votre apprentissage de Git au jour le jour vous deviendrez un maitre Git Maintenant que vous connaissez Git nous verrons comment Travailler avec Git Ici nous parcourrons les mani re d utiliser Git dans des scripts avec des outils de d ploiement des diteurs et d autres choses Cette section est faite pour vous aider int grer Git dans votre environnement Enfin nous auront une s rie d articles sur la documentation bas niveau qui peut aider les hackeurs Git qui veulent apprendre le d roulement des fonctions internes et les protocoles de Git Feedback et Contribution n importe quel moment si vous trouvez une erreur ou si vous voulez contribuer ce livre vous pouvez m envoyer un mail alx girard gmail com ou vous pouvez cloner le code source de ce livre http github com schacon gitbook et m envoyer un patch ou un pull request R f rences Ce livre est en grande partie tir de diff rentes sources mix es et remises ensemble Si vous voulez d couvrir quelques uns des articles originaux vous pouvez aller les voir et remercier leurs auteurs e Git User Manual Chapter Introduction e The Git Tutorial e
31. 12 days ago message merged recent changes Autre chose int ressante vous pouvez aussi visualiser le graphe des commits avec l options graph comme ceci git log pretty format h s graph 2d3acf9 ignore errors from SIGCHLD on trap 5e3ee11 Merge branch master of git github com dustin grit IN 35 Git Community Book 36 42 eac9 Added a method for getting the current branch 30e367c timeout code and tests 5a09431 add timeout protection to grit e1193f8 support for heads with slashes in them PA d6016bc require time for xmlschema a vous montrera un repr sentation plut t r ussie des lignes de l historique des commits Ordonner le Log Vous pouvez aussi voir les entr es de log dans des ordres diff rents Notez que git log commence par le commit le plus r cent et va reculons vers ses parents cependant puisque l historique de git peut contenir de multiples lignes ind pendantes de d veloppement l ordre de l affiche des commits est plut t arbitraire Si vous voulez sp cifier un ordre en particulier vous pouvez ajouter une option la commande git log Pa d faut les commit sont montr s dans l ordre inversement chronologique Cependant si vous ajoutez l option topo order les commits apparaitrons dans l ordre topologique i e les commits descendants sont affich s avant leurs parents Si nous regardons le git log pour le d p t de Grit dans un ordre topolo
32. 40000 tree f66a66ab6a7bfe86d52a66516ace212efa00felf our_files and then use git mk tree again cat tmp newtree txt git mk tree 5bac6559179bd543a024d6d187692343e2d8ae83 And we now have an artificial directory structure in Git that looks like this 123 Git Community Book filel copy our_files filel file2 1 directory 3 files without that structure ever having actually existed on disk Plus we have a SHA 5bac6559 that points to it Rearranging Trees We can also do tree manipulation by combining trees into new structures using the index file As a simple example let s take the tree we just created and make a new tree that has two copies of our 5bac6559 tree in it using a temporary index file You can do this by resetting the GIT_INDEX_FILE environment variable or on the command line First we read the tree into our index file under a new prefix using the git read tree command and then write the index contents as a tree using the git write tree command export GIT_INDEX_FILE tmp index git read tree prefix copy1 5bac6559 git read tree prefix copy2 5bac6559 git write tree bb2 fa6de7625322322382215d9ea78cfe76508c1 gt git ls tree bb2fa 040000 tree 5bac6559179bd543a024d6d187692343e2d8ae83 copy1 040000 tree 5bac6559179bd543a024d6d187692343e2d8ae83 copy2 So now we can see that we ve created a new tree just from index manipulation You can also do interesting merge operations and such i
33. 50065988chfa1ffa9ab68a 003e7e47fe2bd8d01d481f44d7af0531bd93d3b21c01 003f74730d410fcbh6603ace96f1dc55ea6196122532d 0000 HEAD Q multi_ack thin pack side band side band 64k ofs delta shall refs heads debug refs heads dist refs heads local refs heads master Chaque ligne commence par 4 bits repr sentant la longueur de la d claration en hexad cimal La section se termine par un d claration de longueur de ligne de 0000 Ceci est renvoy comme tel au client Le client r pond avec une autre requ te Q054want 74730d410f cb6603ace96F1dc55ea6196122532d multi_ack side band 64k ofs delta 0032want 7d1665144a3a975c05f1f43902ddaf 84e784dbe 032want 5a3f6be755bbb7deae50065988cbfalf fa9ab68a 0032want 7e47fe2bd8d01d481f44d7af0531bd93d3b21c01 Q 32want 74730d410f cb6603ace96f1dc55ea6196122532d Q0000009done C est envoy au processus git upload pack encore ouvert qui envoie ensuite en stream la r ponse finale Q QO8NAK n Q023 002Counting objects 2797 done n Q02b 002Compressing objects Q 02c 02Compressing objects Q 02c 02Compressing objects Q02c 002Compressing objects Q 02c 02Compressing objects Q 02c 02Compressing objects Q02c 02Compressing objects 0 1 1177 1 12 1177 2 24 1177 3 36 1177 4 48 1177 5 59 1177 6 71 1177 Ne ey Nie NF NF XF Xp Chapter 7 Fonctionnement Interne et Plomberie Q053 002Compressing objects 7 83 1177 rCompressing objects 8 95 1177 r
34. 62e55 added file_size pick 9824bf4 fixed little thing pick 21d80a5 added number to log pick 76b9da6 added the apply command pick c264051 Revert added file_size not implemented correctly Rebase 408319 b 4dc3d onto 408319 Commands p pick use commit e edit use commit but stop for amending s squash use commit but meld into previous commit If you remove a line here THAT COMMIT WILL BE LOST However if you remove everything the rebase will be aborted Cela signifie qu il y a 5 commits depuis votre derni re publication et chaque commit est d crit par un ligne avec le format suivant Caction sha partiel court message du commit Maintenant vous pouvez changer l action qui est pick par d faut soit par edit ou squash ou juste la laisser comme elle est pick Vous pouvez aussi r ordonner les commits en d pla ant les lignes comme vous le voulez Ensuite quand vous sortez de l diteur git essayera d appliquer les commits en suivant leur ordre d arrangement et l action s lectionn e Chapter 4 Usage Interm diaire Si pick est s lectionn il essayera simplement d appliquer le patch et de sauvegarder le commit avec le m me message qu avant Si squash est s lectionn il combinera ce commit avec le pr c dent pour former un nouveau commit Vous trouverez alors un autre diteur pour merger les messages des 2 commit qui ont t s assembl s
35. 934a9a028b88e83e2b0f8b36618fe503349f8e BLOCK Make USB storage depend on SCSI rather than selecting it try Chapter 5 Git Avanc Si vous lancez git branch ce moment vous verrez que git vous a temporairement d plac sur une nouvelle branche nomm e bisect Cette branche pointe vers un commit avec l identifiant 65934 qui est accessible depuis master mais pas depuis v2 6 18 Compilez et testez votre projet pour voir quand il plante En assument qu il plante Ensuite git bisect bad Bisecting 1769 revisions left to test after this 7ef f82c8b1511017ae605f0c99ac275a7e21b867 i2c core Drop useless bitmaskings r cup re une version plus ancienne Continuez comme a en disant chaque fois a git sit la version qu il vous donne est bonne ou mauvaise et divisant par deux le nombre de r visions tester chaque tape Apr s environ 13 test dans ce cas il vous montrera l identifiant du commit qui pose probl me Vous pouvez examiner ce commit avec git show trouver qui a publi ce commit et lui envoyer votre rapport de bug par mail avec l identifiant du commit concern Pour terminer lancez git bisect reset pour revenir la branche sur laquelle vous vous trouviez et effacer la branche temporaire bisect La version que git bisect vous r cup re chaque tape n est qu une suggestion et vous pouvez choisir une version diff rente si vous pensez que c est une meilleure id e Par exemple vous tomberez parfoi
36. 9f39 Git Community Book 112 tree d0492b368b66bdabf2ac1fd8c92b39d3db916e59 parent 54196cc2703dc165cbd373a65a4dcf22d50ae7Ff7 author J Bruce Fields lt bfields puzzle fieldses org gt 1143418702 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143418702 0500 add emphasis L objet tree r f re ici au nouvel tat du tree git ls tree d0492b36 100644 blob a0423896973644771497bdc03eb99d5281615b51 file txt git cat file blob a0423896 hello world et l objet parent r f re au commit pr c dent git cat file commit 54196cc2 tree 92b8b694ffb1675e5975148e1121810081dbdffe author J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 committer J Bruce Fields lt bfields puzzle fieldses org gt 1143414668 0500 LES REFERENCES GIT Les branches les branches de suivie distant et les tags sont tous des r f rences des commits Toutes les r f rences sont nomm es avec un nom de chemin s par par des slash commen ant par refs Les noms que nous avons utilis s jusqu maintenant sont actuellement des raccourcis La branche test est un raccourci pour refs heads test Le tag v2 6 18 est un raccourci pour refs tags v2 6 18 origin master est un raccourci pour refs remotes origin master Chapter 7 Fonctionnement Interne et Plomberie Le nom complet est parfois utile si par exemple il existe un tag et une branche avec le m me nom les r f rences fra cheme
37. Git Avanc Durant le merge l index garde 3 versions de chaque fichiers Une de ces 3 tape de fichier repr sente une version diff rente du fichier git show 1 fichier txt Le fichier dans l anc tre commun des 2 branches git show 2 fichier txt La version pr sente dans HEAD git show 3 fichier txt La version pr sente dans MERGE_HEAD Quand vous demandez a git diff de vous montrer les conflits il fait une diff rence en 3 points entre les r sultats conflictuels de merge dans le r pertoire de travail avec les version 2 et 3 pour montrer seulement les morceaux de code qui ont du contenu de chaque c t m lang s en d autres termes quand un morceau du r sultat du merge ne vient que de la version 2 alors ce morceau n est pas en conflit est n est pas affich Idem pour la version 3 La diff rence en d but de chapitre vous montre les diff rences entre la version de travail de fichier txt et les versions 2 et 3 Donc au lieux de rajouter les pr fixes ou devant chaque ligne on utilise maintenant 2 colonnes pour ces pr fixes la premi re colonne est utilis e pour les diff rences entre le premier parent et la copie du r pertoire de travail et la deuxi me pour les diff rences entre le second parent et la copie du r pertoire de travail Voir la section COMBINED DIFF FORMAT dans la documentation de git diff files pour plus de d tails sur ce format Apr s avoir r solu le conflit de mani re vidente ma
38. Git Community Book The open Git resource pulled together by the whole community AUTHORS Thank these guys Alecs King alecsk gmail com Amos Waterland apw rossby metr ou edu Andrew Ruder andy aeruder net Andy Parkins andyparkins gmail com Arjen Laarhoven arjen yaph org Brian Hetro whee smaertness net Carl Worth cworth cworth org Christian Meder chris absolutegiganten org Dan McGee dpmcgee gmail com David Kastrup dak gnu org Dmitry V Levin Idv altlinux org Francis Daly francis daoine org Gerrit Pape pape smarden org Greg Louis glouis dynamicro ca Gustaf Hendeby hendeby isy liu se Horst H von Brand vonbrand inf utfsm cl J Bruce Fields bfields fieldses org Jakub Narebski jnareb gmail com Jim Meyering jim meyering net Johan Herland johan herland net Johannes Schindelin Johannes Schindelin gmx de Jon Loeliger jdl freescale org Josh Triplett josh freedesktop org Junio C Hamano gitster pobox com Linus Torvalds torvalds osdl org Lukas Sandstr m lukass etek chalmers se Marcus Fritzsch m fritschy de Michael Coleman tutufan gmail com Michael Smith msmith cbnco com Mike Coleman tutufan gmail com Miklos Vajna vmiklos frugalware org Nicolas Pitre nico cam org Oliver Steele steele osteele com Paolo Ciarrocchi paolo ciarrocchi gmail com Pavel Roskin proski gnu org Ralf Wildenhues Ralf Wildenhues gmx de Robin Rosenberg robin rosenberg lists dewire com Santi B
39. Mac_105 markdown 8 text 05_Installing_Git 4_ Windows markdown 7 1_Getting_a_Git_Repo markdown 7 0_ Comparing_Commits_Git_Diff markdown 45 0_ Hosting_Git_gitweb_repoorcz_github markdown 4 9 files changed 115 insertions 6 deletions Cela permet parfois de voir plus facilement les changements effectu s HHHH HE pe Chapter 3 Utilisation Basique WORKFLOWS DISTRIBU S Supposons qu Alice a d marr un nouveau projet dans son d p t git situ dans home alice project et que Bob qui a un r pertoire utilisateur sur la m me machine home bob veuille y contribuer Bob commence par git clone home alice project mondepot Cela cr e un r pertoire mondepot qui contient un clone du d p t d Alice Le clone est une copie parfaite du projet original poss dant aussi sa propre copie de l historique du projet original Bob fait quelques changements et les commit Cediter des fichiers git commit a r p ter autant que n cessaire Quand il est pr t il dit Alice de r cup rer pull ses changements depuis son d p t situ dans home bob mondepot Alice fait alors cd home alice project git pull home bob myrepo master Cela merge les changement de la branche master de Bob dans la branche courante d Alice Si Alice a fait ses propres changements pendant ce temps alors elle devra peut tre r parer quelques conflit la main Notes l option mas
40. ail et une fois le bug limin ou ventuellement en revenant sur la branche apr s l avoir corrig sur une branche diff rente retrouver les changement du travail en cours git stash travail en cours de la fonctionnalit conquerir le monde Cette commande sauvegardera vos changement dans le stash et remettra z ro votre r pertoire de travail et l index afin de correspondre avec le sommet de la branche courante Apr s vous pouvez faire vos corrections comme d habitude diter et tester git commit a m machin bidulefix Apr s a vous pouvez revenir l o vous tiez en train de travailler avec git stash apply git stash apply La File de Cache Stash Queue Vous pouvez aussi utiliser le cache pour empiler vos changements cach s Si vous lancez git stash list vous verrez quelles caches vous avez sauvegard Chapter 4 Usage Interm diaire gt git stash list stash 0 WIP on book 5Sibeald fixed images stash 1 WIP on master 9705ae6 changed the browse code to the official repo Ensuite vous pouvez les s lectionner individuellement pour les appliquer avec git stash apply stash I Vous pouvez nettoyer la liste avec git stash clear L ARBORESCENCE GIT TREEISH Il y a de nombreuses mani res de faire r f rence un commit ou un tree sans peler toute la cha ne de 40 caract res sha Avec Git on appelle ces r f rences treeish Sha Partiel Si le sha de vot
41. aquet de votre syst me yum install git core apt get install git core Si cela ne fonctionne pas vous pouvez t l charger les paquets deb ou rpm ces adresses RPM Packages Stable Debs Si vous pr f rer installer Git depuis le code source sur votre syst me Linux cet article pourra vous aider Article Installing Git on Ubuntu Mac 10 4 Pour Mac 10 4 et 10 5 vous pouvez installer Git via MacPorts s il est d j install Sinon vous pouvez l installer depuis ici Une fois que MacPorts est install il vous suffit de faire ceci sudo port install git core Si vous pr f rez installer Git depuis le code source ces articles peuvent vous aider Article Installing Git on Tiger Chapter 2 Le Commencement Article Installing Git and git svn on Tiger from source Mac 10 5 Avec Leopard vous pouvez installer Git via MacPorts mais vus avez une autre option qui vous permet d installer Git avec une interface d installation Vous pouvez t l charger cette interface ici Git OSX Installer Si vous pr f rez installer Git depuis le code source ces articles peuvent vous aider Article Installing Git on OSX Leopard Article Installing Git on OS 10 5 Windows Sur Windows il est assz simple d installe Git T l chargez et installez simplement le paquet msysGit Allez au chapitre Git sur Windows pour regarder un screencast qui vous fera une d monstration de l installation et de l usage de Git sur Windows 21 Git Co
42. branche courante quelques soient les options de la ligne de commande Chapter 3 Utilisation Basique Plus tard Bob peut mettre jour son dot avec les derni res modifications d Alice en utilisant git pull Il n a besoin de donner le chemin vers le dot d Alice quand Bob a clon le d p t d Alice git a stock l adresse de son d p t dans la configuration du d p t et cette adresse est utilis e pour r cup rer les donn es avec pull git config get remote origin url home alice project La configuration compl te cr e par git clone est visible en lan ant git config I et la page de documentation de git config explique chacune de ces options Git conserve aussi une copie propre de la branche master d Alice sous le nom origin master git branch r origin master Si Bob d cide plus tard de travailler avec un h bergeur diff rent il pourra toujours cr er des clones et r cup rer les donn es en utilisant le protocole ssh git clone alice org home alice project myrepo D une autre mani re git contient un protocole natif ou peut aussi utiliser rsync ou http voir git pull pour plus de d tails Git peut aussi tre utilis de mani re plus similaire CVS avec un d p t central sur lequel de nombreux utilisateurs envoient leur modifications voir git push et gitcvs migration 43 Git Community Book 44 Les D p t Git Publiques Une autre fa on d envoyer des modifications un pro
43. ch in Git would force developers to keep a local copy of modules they are not interested in touching Commits in an enormous checkout would be slower than you d expect as Git would have to scan every directory for changes If modules have a lot of local history clones would take forever On the plus side distributed revision control systems can much better integrate with external sources In a centralized model a single arbitrary snapshot of the external project is exported from its own revision control and then imported into the local revision control on a vendor branch All the history is hidden With distributed revision control you can clone the entire external history and much more easily follow development and re merge local changes Git s submodule support allows a repository to contain as a subdirectory a checkout of an external project Submodules maintain their own identity the submodule support just stores the submodule repository location and commit ID so other developers who clone the containing project superproject can easily clone all the submodules at the same revision Partial checkouts of the superproject are possible you can tell Git to clone none some or all of the submodules The git submodule command is available since Git 5 3 Users with Git 1 5 2 can look up the submodule commits in the repository and manually check them out earlier versions won t recognize the submodules at all To see how submodule support works
44. commit par exemple pour revenir au commit le plus r cent git revert HEAD 74 Chapter 4 Usage Interm diaire Cela cr era un nouveau commit qui annule les changements dans HEAD Vous pourrez diter le message de ce nouveau commit Vous pouvez aussi revenir sur des changements plus anciens par exemple sur l avant dernier changement git revert HEADA Dans ce cas git essayera d annuler l ancien changement en gardant intactes les modifications faites depuis Si plus d un changement se superpose sur les changements annuler vous aurez r gler les conflits manuellement de la m me fa on que quand vous r glez un merge R parer une erreur en modifiant le commit Si vous venez de committer quelque chose mais que vous vous rendez compte que vous devez r parer ce commit les versions r centes de git commit vous donnent acc s l option amend qui demande git de remplacer le commit de HEAD par un autre bas sur le contenu actuel de l index Cela vous donne l opportunit d ajouter de fichiers que vous avez oubli s ou de corriger des erreurs de typo dans le message du commit avant de publier les changements pour les autre d veloppeurs Si vous trouvez une erreur dans un ancien commit mais que vous ne l avez toujours pas publi utilisez le mode interactif de git rebase avec git rebase i en marquant les changements qui doivent tre corrig s avec edit Cela vous permettra de modifier le commit pendant le processus
45. create for example four example repositories that can be used later as a submodule mkdir git cd git 95 Git Community Book for iinabcd do mkdir i cd i git init echo module i gt i txt git add i txt git commit m Initial commit submodule i Cd as done Now create the superproject and add all the submodules mkdir super cd super git init foriinabcd do git submodule add git i done NOTE Do not use local URLs here if you plan to publish your superproject See what files git submodule created ls a git gitmodules a b c d The git submodule add command does a couple of things It clones the submodule under the current directory and by default checks out the master branch e It adds the submodule s clone path to the gitmodules file and adds this file to the index ready to be committed 96 Chapter 5 Git Avanc e It adds the submodule s current commit ID to the index ready to be committed Commit the superproject git commit m Add submodules a b c and d Now clone the superproject ed cs git clone super cloned cd cloned The submodule directories are there but they re empty 1s a a git submodule status d266b9873ad50488163457f025db7cdd9683d88b a e81d457da15309b4fef4249aba9b50187999670d b c1536a972b9affea0f16e0680ba87332dc059146 c d96249f f5d57de5de093e6baf f9e aafa5276a74 d NOTE The commit object names shown above would be different for y
46. e h delta h pack h blob h commit h tag h tree h refs h pack revindex h 628522ec Junio C Hamano C est souvent utile pour voir qui a cr e une erreur si le fichier revient sur une ligne ou qu une erreur casse la compilation Vous pouvez aussi s lectionner le num ro des ligne de d but et de fin de la partie de fichier a analyser gt git blame L 160 10 shal_file c ace1534d Junio C Hamano 2005 05 07 00 38 04 0700 ace1534d Junio C Hamano 2005 05 07 00 38 04 0700 Ofcfd160 Linus Torvalds 2005 04 18 13 04 43 0700 88 160 161 162 Ofcfd160 Linus Torvalds 790296fd Jim Meyering Qfcfd160 Linus Torvalds ace1534d Junio C Hamano ace1534d Junio C Hamano ace1534d Junio C Hamano d19938ab Junio C Hamano GIT ET LES MAILS Envoyer des patches pour un projet 2005 04 18 2008 01 03 2005 04 18 2005 05 07 2005 05 07 2005 05 07 2005 05 09 743 07 43 04 04 04 56 0700 0100 0700 0700 0700 0700 0700 163 164 165 166 167 168 169 OX E E E Chapter 5 Git Avanc NOTE This returns a statically allocate careful about using it Do an xstrdup filename Also note that this returns the Location SHA1 file can happen from any alternate DB_ENVIRONMENT environment variable if i Si vous avez juste effectu quelques modifications le mail est la mani re la plus simple d envoyer ces changements comme patches D abord utilisez git format patch
47. e que vous utiliserez 85 Git Community Book 86 git remote add f Bproject path to B 1 git merge s ours no commit Bproject master 2 git read tree prefix dir B u Bproject master 3 git commit m Merge B project as our subdirectory 4 git pull s subtree Bproject master 5 Utiliser le merge subtree vous permet d apporter moins de complications administratives aux les utilisateurs de votre d p t Elle est aussi compatible avec des version plus anciennes de git jusqu Git v1 5 2 et vous aurez le code juste apr s le clonage Cependant si vous utilisez des sous modules vous pouvez alors choisir de ne pas transf rer les objets de ces sous modules Cela peut poser un probl me lors de l utilisation des merge subtree Il est aussi plus facile d effectuer des changement dans votre autre projet si vous utiliser les sous modules from Using Subtree Merge TROUVER LES PROBLEMES GIT BISECT Supposons que la version 2 6 18 de votre project fonctionne correctement mais que la version sur la branche master plante Parfois la meilleure fagon de trouver la cause d une telle r gression est de faire de la recherche brutale dans l historique de votre projet pour trouver un commit en particulier responsable du probl me La commande git bisect peut vous aider dans cette d marche git bisect start git bisect good v2 6 18 git bisect bad master Bisecting 3537 revisions left to test after this 65
48. e3ca83d53a2f16b39c453fad33380f8d1cc Add dependency for Open4 OF87b4d9020f f F756c18323106b3fd4e2f422135 merged recent changes accepts relative alt pat fO0ce7d5979dfbOF415799d086e14a8d2F9653300 updated the Manifest file Ou vous pouvez utiliser le format short 34 Chapter 3 Utilisation Basique git log pretty short commit a6b444f570558a5f31ab508dc2a24dc34773825f Author Scott Chacon lt schacon gmail com gt dammit this is the second time this has reverted commit 49d77f72783e4e9f12d1bbcacc45e7a15c800240 Author Scott Chacon lt schacon gmail com gt modified index to create refs heads if it is not there commit 9764edd90cf9a423c9698a2f1e814F16F0111238 Author Hans Engel lt engel engel uk to gt Add diff lcs dependency Vous pouvez aussi utiliser medium full fuller email ou raw Si ces format ne sont pas exactement ce dont vous avez besoin vous pouvez cr er votre propre format avec l option pretty format voir la documentation de git log pour toutes les options de formatage git log pretty format h was an ar message s a6b444f was Scott Chacon 5 days ago message dammit this is the second time this has re 49d77f7 was Scott Chacon 8 days ago message modified index to create refs heads if it i 9764edd was Hans Engel 11 days ago message Add diff lcs dependency elbale3 was Hans Engel 11 days ago message Add dependency for Open4 f87b4d was Scott Chacon
49. endroit o se trouve le d p t Git peut tre utilis avec de nombreux protocoles donc cette adresse peut commencer avec ssh http s git ou juste un nom d utilisateur en supposant que git passe par ssh Par exemple le code source de Git m me peut tre clon en passant par le protocole git 23 Git Community Book 24 git clone git git kernel org pub scm git git git ou par http git clone http www kernel org pub scm git git git Le protocole git est plus rapide et plus efficace mais il est parfois n cessaire d utiliser http derri re un firewall d entreprise par exemple Dans tous les cas vous devriez maintenant avoir un r pertoire nomm git qui contient tout le code source de Git et son historique c est simplement une copie de ce qui se trouvait sur le serveur Par d faut Git nommera le nouveau r pertoire o il stockera votre code clon en prenant ce qui arrive juste avant le git dans le chemin du projet clon ie git clone http git kernel org linux kernel git torvalds linux 2 6 git cr era un nouveau r pertoire nomm linux 2 6 pour y cloner le code Initialiser un Nouveau D p t Imaginons que nous avons une archive nomm e project tar gz avec notre travail initial Nous pouvons le plac sous le contr le de version de Git comme ceci tar xzf project tar gz cd project git init Git vous r pondra Initialized empty Git repository in git Vus avez maintenant i
50. epuis un autre SCM Il y a d autres SCMs list s en t te du Sondage Git de la documentation est n cesaire pour eux TODO e CVS e Mercurial hg e Bazaar NG e Darcs e ClearCase GIT EN MODE GRAPHIQUE Git poss de quelques interfaces graphiques assez populaires Elles permettent de lire et ou manipuler des d p t Git Les Interfaces Fournies Git est fourni avec 2 programmes graphiques crits en Tcl Tk Gitk est un navigateur de d p t et un visualiseur d historique de commits gitk git gui est un outil qui vous aidera visualiser les op rations sur l index comme les ajouts les retraits et les commits Il ne permet pas faire toutes les op rations disponibles avec la ligne de commande mais pour les op rations les plus basiques c est un tr s bon outil 103 Git Community Book git gui Projets Tiers Pour les utilisateurs de Mac vous trouverez GitX et GitNub Pour Linux et les autres utilisateurs de Qt il y a QGit H BERGEMENT GIT github repoorcz USAGES ALTERNATIFS ContentDistribution TicGit 104 LE LANGAGE DE SCRIPT ET GIT Ruby et Git grit jgit jruby PHP et Git Python et Git pygit Perl et Git perlgit GIT ET LES EDITEURS DE CODE textmate eclipse Chapter 6 Travailler avec Git 105 Git Community Book netbeans 106 Chapter 7 Chapter 7 Fonctionnement Interne et Plomberie Fonctionnement Interne et Plomberie COMMENT GIT STOCKE LES OBJETS Ce cha
51. formations Exporter un d p t git par http Le protocole git est plus performant et plus fiable mais sur un h bergeur qui a d j configur son serveur web l exportation http peut tre une solution plus simple mettre en place Tout ce que vous devez faire est de placer le d p t git bare que vous venez de cr er dans un dossier qui est accessible depuis le serveur web et faire quelques ajustements pour donner au client web les quelques informations additionnelles qu il a besoin mv proj git home you public_html proj git cd proj git git bare update server info chmod a x hooks post update Pour plus d explications sur ces 2 derni res lignes regardez la documentation de git update server info et githooks Il vous suffit ensuite de diffuser l adresse de proj git aux autres d veloppeurs Tout le monde aura la possibilit de cloner ou de r cup rer pull les changements du projet depuis cette adresse avec la commande suivante par exemple git clone http yourserver com you proj git Chapter 4 Usage Interm diaire CONFIGURER UN D P T PRIV Si vous devez configurer un d p t priv et que vous d sirez faire a localement plut t que d utiliser un h bergeur vous avez plusieurs solutions Acc der au D p t par SSH En g n ral la solution la plus facile est d utiliser simplement Git par SSH Si les utilisateurs ont d j des comptes ssh sur le serveur vous pouvez placer le d p t git n impor
52. gement dans son d p t publique ressemble a Chapter 3 Utilisation Basique vous envoyez push votre d p t personnel gt votre d pot publique A l l l vous r cup rez pull ils r cup rent pull l l ils envoient Cpush V leur d p t publique lt leur d p t Publier des Modifications sur un D p t Publique L utilisation des protocoles http et git permet aux autres d veloppeurs de r cup rer les derniers changements mais ils n auront pas l autorisation d criture sur ces d p t Pour cela vous devrez mettre jour votre d p t publique avec les derniers changements obtenus votre le d p t priv La fa on la plus simple de proc der est d utiliser git push et ssh pour mettre jour la brancje master avec le dernier tat de votre branche master lancez git push ssh yourserver com you proj git master master ou juste git push ssh yourserver com you proj git master Comem avec git fetch git push se plaindra qu il n y a pas eu d avance rapide fast forward allez la section suivante pour plus de d tails pour g rer ce cas 45 Git Community Book 46 La cible d un push est normalement un d p t nu Vous pouvez aussi publier vers un d p t qui contient une arborescence de travail mais cette arborescence ne sera pas mise jour durant la publication Cela pourra vous amener des r sultats
53. gique vous pouvez voir que toutes les lignes de d veloppement sont regroup es ensembles git log pretty format h s topo order graph 4a904d7 Merge branch idx2 T 23f4ecf Clarify how to get a full count out of Repo commits l dfeffce merged in bryces changes and fixed some testing issues 9d6d250 Appropriate time zone test fix from halorgium cec36f7 decfe7b Cd27d57 823a9d9 x E OX OX HH HH XX 4eb3bfQ d065e76 3fa3284 d 1cffd 7c74272 13f8cc3 6bae5a b5bedf d40e1f ef8a23c 15dd347 3dabb6a eac1c37 Qa7d387 4d6b69c Chapter 3 Utilisation Basique Fix the to_hash test to run in US Pacific time fixed manifest and grit rb to make correct gemspec added lib grit commit_stats rb to the big list o files cleared out errors by adding in Grit Git run method resolved merge conflicts hopefully amicably empty commit to push project to runcoderun whitespace whitespace oops update version here too push 0 8 3 capture stderr and log it if debug is true when running commands update history some docs update gemspec to include the newly added files to manifest add missing files to manifest add grit test allow sending debug messages to a user defined logger if provided tes pull out the date in this assertion and compare as xmlschemaw to avoi Removed debug print Fixed to close opened file descriptio
54. is avant de mettre a jour l index le diff ressemblera a git diff diff cc file txt index 802992c 2b60207 0000000 a file txt b file txt 1 1 1 1 1 1 Hello world Goodbye Goodbye world 83 Git Community Book 84 Cela montre que notre version r solue a effac Hello world du premier parent et effac Goodbye du second parent puis ajout Goodbye world qui tait avant absent des 2 Quelques options sp ciales de diff permettent de faire la diff rence entre le r pertoire de travail et les diff rentes tapes git diff 1 file txt diff rence avec l tape 1 git diff base file txt m me chose que ci dessus git diff 2 file txt diff rence avec l tape 2 git diff ours file txt m me chose que ci dessus git diff 3 file txt diff rence avec l tape 3 git diff theirs file txt m me chose que ci dessus Les commandes git log and gitk fournissent aussi de l aide particuli re pour les merges git log merge gitk merge Cela vous montrera tous les commits qui existent seulement des HEAD ou dans MERGE_HEAD et qui concernant les fichiers non merg s Vous pouvez aussi utiliser git mergetool qui vous permet de merger des fichiers non merg s en utilisant des outils externes comme emacs ou kdiff3 Chaque fois que vous r solvez les conflits d un fichier et que vous mettez jour l index git add fichier txt les diff rentes tapes de se fichiers
55. it add a git commit m Updated submodule a git push You have to run git submodule update after git pull if you want to update submodules too Pitfalls with submodules Always publish the submodule change before publishing the change to the superproject that references it If you forget to publish the submodule change others won t be able to clone the repository cd git super a echo i added another line to this file gt gt a txt git commit a m doing it wrong this time Ed as git adda git commit m Updated submodule a again git push cd git cloned git pull git submodule update error pathspec 261dfac35cb99d380eb966e102c1197139f7fa24 did not match any file s known to git Did you forget to git add Unable to checkout 261dfac35cb99d380eb966e102c1197139f7fa24 in submodule path a TAA LA LA LA LA LA LA LA You also should not rewind branches in a submodule beyond commits that were ever recorded in any superproject 99 Git Community Book It s not safe to run git submodule update if you ve made and committed changes within a submodule without checking out a branch first They will be silently overwritten cat a txt module a echo line added from private2 gt gt a txt git commit a m line added inside private2 Cd 3 git submodule update Submodule path a checked out d266b9873ad50488163457f025db7cdd9683d88b cd a cat a txt module a NOTE The changes are still
56. jet est d avertir le chef de ce projet afin qu il r cup re les changements depuis votre d p t en utilisant git pull C est un mani re d obtenir les mises jours du d p t principal mais cela fonctionne aussi dans l autre sens Si vous et le chef de projets avaient tous les 2 un compte sur le m me ordinateur alors vous pouvez changer les modifications de vos d p ts respectifs directement les commandes qui acceptent des URL de d p ts comme options accepteront aussi un chemin de r pertoire local git clone path to repository git pull path to other repository ou une adresse ssh git clone ssh yourhost you repository Pour les projets avec quelques d veloppeurs ou pour synchroniser quelques projets priv s cela peut vous suffire Cependant la pratique la plus courante est de maintenir un d p t publique g n ralement sur le m me host pour que les autres puissent y r cup rer les changements Cela est souvent plus efficace et vous permet de s parer proprement le travail priv en cours de r alisation des projets publiques et visibles Vous continuerez travailler au jour le jour sur votre d p t personnel mais p riodiquement vous enverrez push les modifications de votre d p t personnel sur votre d p t publique permettant alors aux autres d veloppeurs de r cup rer pull les changements disponible dans ce d p t Donc le flux de travail dans une situation o un autre d veloppeur fournit des chan
57. l es important de noter que les index de packfile ne sont pas n cessaires pour extraire les objets d un packfile ils sont juste utilis pour retrouver rapidement des objets individuels depuis un pack Le format du packfile est utilis dans les programmes upload pack et receive pack protocoles de publication push et de r cup ration fetch pour transf rer les objets et il n y a alors pas d index utilis il peut tre construit apr s coup en scannant le packfile Le Format du Packfile Le format du packfile m me est tr s simple Il y a une ent te une s rie d objets packag s chacun avec sa propre ent te et son propre corps puis un checksum la fin Les 4 premiers bits forment a cha ne de caract re PACK qui est utilis e pour tre stir que vous lisez correctement le d but du packfile Ceci est suivi d un num ro de version du packfile sur 4 bits puis 4 autres bis repr sentant le nombre d entr es dans ce fichier En Ruby vous pourriez lire les donn es de l ent te de cette mani re def read_pack_header sig session recv 4 ver session recv 4 unpackC N Q entries session recv 4 unpackC N Q sig ver entries end Apr s a vous avec une suite d objets packag s ordonn s par leur SHA chacun repr sent par l ent te de l objet et son contenu Une somme SHA de 20 bits de tous les SHAs du packfile se trouve dans les 20 bits la fin du fichier 118 Chapter 7 Fonctionnement Interne et Plo
58. la commande git tag pour apprendre comment cr er et v rifier les objets tags Notez que git tag peut aussi tre utilis pour cr er des tags l gers qui ne sont pas du tout des objets tags mais juste des simples r f rences dont le nom commence par refs tags LE REPERTOIRE GIT ET LE REPERTOIRE DE TRAVAIL Le R pertoire Git Le r pertoire git est un r pertoire qui contient tout l historique de Git et les m ta informations du projet avec tous les objets commits tree blobs tags tous les pointeurs vers les diff rentes branches et plus encore Il y aun seul r pertoire Git par projet au contraire de systeme comme SVN ou CVS qui contient ce r pertoire dans chaque sous r pertoire du projet ce dossier se nomme git par d faut il peut tre nomm diff remment et ce dossier se situe la racine de votre projet Si vous regardez le contenu de ce r pertoire Vous pouvez y trouver tous vos fichiers important gt tree L 1 HEAD pointeur vers votre branche courante l config configuration de vos pr f rences description description de votre projet hooks pre post action hooks index fichier d index voir prochaine section logs un historique de votre branche objects vos objets commits trees blobs tags refs pointeurs vers vos branches Vous pourrez trouver d autres fichiers dossiers ici aussi mais ils ne sont pas important pour l instant Chapter
59. le commit racine et repr sente la r vision initiale d un projet Chaque projet doit contenir au moins une racine Un projet peut avoir plusieurs racine bien que a ne soit pas tr s commun ou que a ne soit pas une bonne id e Un author Le nom de la personne responsable de ce changement avec sa date Un committer Le nom de la personne qui a cr le commit avec la date de cr ation Cet attribut peut tre diff rent de l auteur par exemple si l auteur crit un patch est l envoi une autre personne par mail cet personne peut utilis le patch pour cr er le commit Un comment qui d crit ce commit Notez qu un commit ne contient pas d information a propos de ce qui a t modifi tous les changements sont calcul s en comparant les contenus du tree r f renc dans ce commit avec le tree associ au x parent s du commit En particulier git n essaye pas d enregistrer le rennomage de fichier explicitement bien qu il puisse identifier des cas o la Chapter Introduction persistance des donn es d un fichier avec un chemin modifi sugg re un rennomage Voir par exemple la commande git diff avec l option M Un commit est normalement cr avec la commande git commit qui cr e un commit dont le parent est est le HEAD courant et avec le tree pris depuis le contenu actuellement stock dans l index Le Mod le Objet Donc maintenant que nous avons vu les 3 types d objets principaux blob tree et commit
60. le plus r cent en liminant 7b593b5 mais en gardant 5 Ibeal 7b593b5 51beal Ceci inclura tous les commits depuis 7b593b 7b593b Chapter 4 Usage Interm diaire LES BRANCHES DE SUIVI Une branche de suivi de Git est une branche locale qui est connect e une branche distante Quand vous publiez ou r cup rez les donn es de cette branche Git publie et r cup res automatiquement les informations de la branche laquelle elle est connect e Utilisez ceci si vous r cup rer toujours vos donn es depuis la m me branche en amont dans une nouvelle branche et si vous ne voulez pas utiliser git pull explicitement La commande git clone configure automatiquement une branche master qui est une branche de suivi pour origin master la branche master du d p t clon Vus pouvez cr er un branche de suivi manuellement en ajoutant l option track la commande branch de Git git branch track experimental origin experimental Puis vous lancez git pull experimental Cela r cup rera automatiquement les donn es de origin et mergera origin experimental dans votre branche local experimental De a m me mani re vous pouvez publier vers origin Git publiera vos modifications de experimental vers origin experimental sans n avoir aucune commande a sp cifier 69 Git Community Book 70 RECHERCHE AVEC GIT GREP Il est tr s facile de trouver des fichiers avec des mots ou
61. les diff rences entre 2 objets trees associ s puisqu il peut ignorer les entr es avec le m me nom d objet Note en pr sence de sous modules les trees peuvent aussi contenir des commits comme entr es Voir la section Sous Modules Notez que tous les fichiers ont le mode 644 ou 755 git ne tient compte que du bit ex cutable L Objet Commit L objet commit lie l tat physique d un tree avec une description de la mani re et de la raison de l arriv e cet tat ae668 Vous pouvez utiliser git show ou git log avec l option pretty raw pour examiner vos commits favoris Git Community Book git show s pretty raw 2be7fcb476 commit 2be7fcb4764f2dbcee52635b91fedb1b3dcf7ab4 tree fb3a8bdd0ceddd019615af4d57a53f43d8cee2bf parent 257a84d9d02e90447b149af58b271c194 5edb6a author Dave Watson lt dwatson mimvista com gt 1187576872 0400 committer Junio C Hamano lt gitster pobox com gt 1187591163 0700 Fix misspelling of suppress in docs Signed off by Junio C Hamano lt gitster pobox com gt Comme vous pouvez le voir un commit est d fini par Un tree Le nom SHAI de l objet tree comme d fini pr c demment repr sentant le contenu d un r pertoire un certain moment parent s Le nom SHAI de ou des num ro de commits qui repr sente l tape ant rieure dans l historique du projet L exemple ci dessus a un parent les commits merg s peuvent en avoir plus d un Un commit sans parent est nomm
62. mberie objects pack pack 4eb8b c5 pack Offsets from pack idx 119 Git Community Book 120 L ent te de l objet est une s rie de un ou plusieurs morceaux d octets 8 bits qui d finissent le type d objet repr sent par les donn es qui suivent et la taille de l objet quand il est d compress Chaque octet ne contient r ellement que 7 bits de donn es le premier bit ne disant que si cet octet est le dernier avant que ne commence les donn es Si le premier bit est vous pourrez continuer lire le prochain octet sinon les donn es commencent au prochain octet Les 3 premiers bits du premier octet sp cifient le type de donn es en accord avec la table ci dessous Actuellement sur les 8 valeurs qui peuvent tre exprim es avec 3 bits 0 7 0 000 est undefined et 5 101 n est pas encore utilis e Nous pouvons voir ici un exemple d ent te de 2 octets o le premier sp cifie que les donn es suivantes sont un commit et le le reste des bits du premier octet accompagn s de ceux du second octet sp cifient que les donn es feront 144 octets une fois d comprim s Chapter 7 Fonctionnement Interne et Plomberie OBJ COMMIT 001 OBJ TREE 010 OBJ BLOB 011 OBJ TAG 100 OBJ OFS DELTA 110 OBJ REF DELTA 111 Read from packfile 10010000 00010010 Step A 10010000 oy Comme 00010010 Step B 10010000 A 00010010 Step C 10010000 00010010 B B A gt 0010010 0000 size 144 Il est impor
63. ment vous pouvez utiliser pull pour merger vos modifications le r sultat cr era un nouveau commit merge comme ceci git merge 53 Git Community Book Cependant si vous pr f rez garder l historique de mywork sous l aspect d une simple s rie de commits sans merge vous pouvez aussi utiliser git rebase git checkout mywork git rebase origin Cette commande va retirer chacun de vos commit sur mywork en les sauvegardant temporairement comme des patches dans le dossier git rebase puis mettre jour la branche mywork avec la derni re version de la branche origin et enfin appliquer chaque patch sauvegard cette nouvelle version de mywork eu oao 000e mywork git rebase Une fois que la r f rence mywork est mise jour jusqu au dernier objet commit cr vos anciens commits seront abandonn s Ils seront s rement effacer si vous lancer la commande de ramasse miettes voir git gc 54 Chapter 4 Usage Interm diaire oae Maintenant nous pouvons voir la diff rence de l historique entre l ex cution d un merge et l ex cution d une recombinaison rebase 55 Git Community Book 000000 git merge 56 Chapter 4 Usage Interm diaire Dans le processus d une recombinaison des conflits peuvent se produire Dans ce cas le processus s arr tera et vous permettra de r parer ces conflits apr s les avoir fix s utilisez git add pour mettre
64. mmitterez si vous lancez git commit sans l option a Enfin vous pouvez lancer git diff HEAD pour afficher les changements de votre le r pertoire de travail depuis votre dernier commit ces changements seront committ s si vous lancez git commit a 39 Git Community Book 40 Plus d Options de Diff Si vous voulez voir comment votre r pertoire de travail actuel diff re de l tat du projet dans une autre branche vous pouvez lancer quelque chose comme a git diff test Cela vous montrera la diff rence entre votre r pertoire de travail actuel et la capture de la branche test Vous pouvez aussi limiter la diff rence un fichier sp cifique ou un sous r pertoire en ajoutant un limiteur de chemin git diff HEAD lib Cette commande vous montrera les differences entre votre r pertoire de travail actuel et le dernier commit ou plus pr cis ment le sommet de la branche actuelle en limitant la comparaison aux fichiers dans le r pertoire lib Si vous ne voulez pas voir le patch complet vous pouvez ajouter l option stat qui limitera la sortie aux noms de fichier qui ont chang s accompagn d un petit graphe d crivant le nombre de lignes diff rentes dans chaque fichier gt git diff stat layout book_index_template html 8 text 05_Installing_Git _Source markdown 14 text 05_Installing_Git 1_Linux markdown 17 text 05_Installing_Git 2_Mac_104 markdown 11 text 05_Installing_Git 3_
65. mmunity Book 22 CONFIGURATION ET INITIALISATION Configuration de Git La premi re chose que vous voudrez et devrez faire c est de configurer votre nom et votre adresse mail que Git utilisera quand vous signerez vos commits git config global user name Scott Chacon git config global user email schacon gmail com Ces commandes vont cr er un fichier dans votre r pertoire utilisateur qui sera utilis par tout vos projets Par d faut ce fichier est gitconfig et il contiendra quelque chose comme a user name Scott Chacon email schacon gmail com Si vous voulez changez ces valeurs pour un projet sp cifique pour utiliser un mail d entreprise par exemple vous pouvez lancer la commande git config sans l option global quand vous tes l int rieur de votre projet Cela ajoutera une section user comme celle que nous venons de voir dans le fichier git config qui se trouve a la racine de votre projet Chapter 3 Utilisation Basique Chapter 3 Utilisation Basique OBTENIR UN D P T GIT Maintenant que nous avons tout configur nous avons besoin d un d p t Git Nous pouvons faire a de 2 mani re soit clonant un d p t qui existe d j soit en initialisant un d p t depuis un dossier vide ou depuis des fichiers existant qui ne sont pas encore sous contr le de version Cloner un D p t Afin d obtenir une copie d un projet vous aurez besoin de conna tre l adresse URL Git du projet l
66. mples html match d examples to_i rescue 0 failures html match d failures 0 to_i rescue pending html match d pending Q to_i rescue 0 if failures zero puts else puts puts puts puts exit end failures examples run pending pending aDID NOT COMMIT YOUR FILES View spec results at File expand_pathChtml_path failures failures examples run pending pending 1 _http probablycorey wordpress com 2008 03 07 git hooks make me giddy RETROUVER DES OBJETS CORROMPUS Retrouver les derniers commits Article de Blog en Retrouver des Blob Corrompus par Linus SUBMODULES Large projects are often composed of smaller self contained modules For example an embedded Linux distribution s source tree would include every piece of software in the distribution with some local modifications a movie player might Chapter 5 Git Avanc need to build against a specific known working version of a decompression library several independent programs might all share the same build scripts With centralized revision control systems this is often accomplished by including every module in one single repository Developers can check out all modules or only the modules they need to work with They can even modify files across several modules in a single commit while moving things around or updating APIs and translations Git does not allow partial checkouts so duplicating this approa
67. munity Book 72 v1 5 read cache c cache_mmap xmmapCNULL cache_mmap_size v1 5 refs c log_mapped xmmapCNULL st st_size PROT_READ MAP_PRIVATE logfd v1 5 0 sha1_file c map xmmapCNULL st st_size PROT_READ MAP_PRIVATE fd v1 5 0 sha1_file c idx_map xmmapCNULL idx_size PROT_READ MAP_PRIVATE fd v1 5 0 sha1_file c win gt base xmmap NULL win gt len v1 5 0 sha1_file c map xmmapCNULL st st_size PROT_READ MAP_PRIVATE fd v1 5 0 sha1_file c buf xmmap NULL size PROT_READ MAP_PRIVATE fd Nous pouvons voir les diff rences entre le code en cours et la version 1 5 0 Dans l une d elles xmmap est maintenant utilis dans wrapper c alors qu il ne l tait pas sans la v1 5 0 Vous pouvez aussi combiner les termes de recherche dans grep Par exemple si nous cherchons o est d finie SORT_DIRENT dans notre d p t git grep e define and e SORT_DIRENT builtin fsck c define SORT_DIRENT builtin fsck c define SORT_DIRENT 1 Vous pouvez aussi rechercher tous les fichiers qui contiennent la totalit des termes recherch s et affiche les lignes avec l un de ces 2 termes git grep all match e define e SORT_DIRENT builtin fsck c define REACHABLE x0001 builtin fsck c define SEEN Qx0002 builtin fsck c define ERROR_OBJECT 1 builtin fsck c define ERROR_REACHABLE 2 builtin fsck c define SORT_DIRENT builtin fsck c define DIRENT_SORT_HINTCde builtin fsck c define SORT_DIRENT 1 builtin f
68. n Vous pouvez aussi utiliser date order qui ordonne les commits par date Cette option est similaire a topo order dans le sens o les parents seront affich s apr s tus leurs enfants mais autrement les commits sont toujours ordonn s suivant la date Vous pouvez voir ici que les lignes de d veloppement sont group es ensembles et qu elle s loignent quand un d veloppement parall le lieu git log pretty format h s date order graph 4a904d7 Merge branch idx2 l l l 81a3e d updated packfile code to recognize index v2 dfeffce merged in bryces changes and fixed some testing issues l 37 Git Community Book c615d80 fixed a log issue Ld 23f4ecf Clarify how to get a full count out of Repo commits 9d6d250 Appropriate time zone test fix from halorgium IX decfe7b fixed manifest and grit rb to make correct gemspec cd27d57 added lib grit commit_stats rb to the big list o file 823a9d9 cleared out errors by adding in Grit Git run method 4eb3bfQ resolved merge conflicts hopefully amicably IN s ba23640 Fix CommitDb errors in test was this the right fix 4d8873e test_commit no longer fails if you re not in PDT b3285ad Use the appropriate method to find a first occurrenc 44dda6c more cleanly accept separate options for initializin z 839ba9f needed to be able to ask Repo new to work with a bar d 65e76 empty commit to push p
69. n a temporary index this way see the git read tree docs for more information 124 Chapter 7 Fonctionnement Interne et Plomberie Creating Commits Now that we have a tree SHA we can create a commit object that points to it We can do this using the git commit tree command Most of the data that goes into the commit has to be set as environment variables so you ll want to set the following GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE Then you will need to write your commit message to a file or somehow pipe it into the command through STDIN Then you can create your commit object based on the tree sha we have git commit tree bb2fa lt tmp message a5f85ba5875917319471dfd98dfc636c1dc65650 If you want to specify one or more parent commits simply add the shas on the command line with a p option before each The SHA of the new commit object will be returned via STDOUT Updating a Branch Ref Now that we have a new commit object SHA we can update a branch to point to it if we want to Lets say we want to update our master branch to point to the new commit we just created we would use the git update ref command git update ref refs heads master a5f85ba5875917319471dfd98dfc636c1dc65650 125 Git Community Book 126 LES PROTOCOLES DE TRANSFERT Nous allons voir ici les communications qui ont lieu entre les client et les serveur pour permettre Git de
70. nitialis le r pertoire de travail vous pourrez y trouver un nouveau r pertoire l int rieur nomm git Chapter 3 Utilisation Basique WORKFLOW NORMAL Modifiez quelques fichiers puis ajoutez leur contenu mis jour dans l index git add filel file2 file3 Vous tre maintenant pr ts pour le commit Vous pouvez v rifier ce qui va tre committ en utilisant la commande git diff avec l option cached git diff cached Sans l option cached git diff vous montrera les changements qui vous avez fait mais que vous n avait pas encore ajout l index Vous pouvez aussi trouver un r sum rapide de la situation en utilisant la commande git status git status On branch master Changes to be committed Cuse git reset HEAD lt file gt to unstage modified filel modified file2 modified file3 EHEHEH Si vous devez faire d autres changements faites le maintenant puis ajoutez le contenu modifi l index Enfin committez vos changements comme ceci git commit Il vous demandera de laisser un message pour d crire les changements qui ont eu lieu puis enregistrera une nouvelle version du projet 25 Git Community Book 26 Au lieu de lancer git add avant vos commit vous pouvez aussi utiliser directement cette commande git commit a Le commit trouvera automatiquement les fichiers modifi s mais pas les nouveaux les ajoutera l index et les committera tout a dans foul e
71. nt cr es sont stock es dans le dossier git refs sous le chemin donn par leur nom Cependant pour plus d efficacit elles peuvent aussi tre packag es ensemble dans un seul fichier voir git pack refs Un autre raccourci utile le HEAD d un d p t peut tre r f renc en utilisant simplement le nom de ce d p t PAr exemple origin est g n ralement utilis comme raccourci vers la branche HEAD dans le dot origin Pour la liste compl te des chemins que git utilise comme r f rence et l ordre utilis pour d cider lequel choisir quand il y a plusieurs r f rence avec le m me raccourci voir la section SPECIFYING REVISIONS de git rev parse Montrer les commits pr sents uniquement dans une branche Supposons que vous voulez voir tous les commits atteignable depuis la branche centrale nomm e master mais non visible depuis les autres branches de votre d p t Nous pouvons faire la liste des sommets du d p ts avec git show ref git show ref heads bf62196b5e363d73353a9dcf094c59595f3153b7 refs heads core tutorial db768d5504c1bb46f63ee9d6e1772bd047e 5bf9 refs heads maint a 7157ac624b2524a059a3414e99f6f44bebcle7 refs heads master 24dbc180ea14dciaebeQ9f14c8ecf32010690627 refs heads tutorial 2 1e87486ae06626c2f31eaa63d26fc0fd646c8af2 refs heads tutorial fixes Nous pouvons afficher seulement le nom de la branche et enlever master avec l aide des outils standards comme cut et grep 113 Git Community Book
72. ntal se trouve dans la branche courante Si vous d veloppez une id e folle puis le regrettez vous pouvez toujours effacer cette branche avec git branch D crazy idea Chapter 3 Utilisation Basique Les branches sont faciles et peu co teuse donc c est un bon moyen pour tester des choses nouvelles Comment merger Vous pouvez joindre 2 branches de d veloppement divergentes en utilisant git merge git merge titrebranche merge les changements fait dans la branche titrebranche dans la branche courante Si il y a des conflits par exemple si le m me fichier est modifi au m me endroit de 2 fa ons diff rente dans la branche distante et la branche locale vous serez avertis l avertissement peut ressembler quelque chose comme a git merge next 100 4 4 done Auto merged file txt CONFLICT content Merge conflict in file txt Automatic merge failed fix conflicts and then commit the result des marqueurs de conflit sont ajout s aux fichiers probl matiques et apr s avoir r solu les conflits manuellement vous pouvez mettre jour l index avec le nouveau contenu et lancer git commit comme vous le feriez quand vous modifiez un fichier Si vous analysez le r sultat de ce commit avec gitk vous verrez qu il 2 parents l un pointant vers le sommet de la branche courante et l autre pointant vers le sommet de l autre branche 29 Git Community Book 30 R soudre un merge Quand un merge n est pas r solu au
73. objects pack pack 4eb8b c5 idx Version Version 2 RE header 2x 4 bytes fanout table 256 x 4 bytes fanout table fanout 255 gt size TE 256 x 4 bytes sha1 0 e offset shas table e sha listing size x 20 bytes size x 20 4 bytes shal size ere checksums size x 4 bytes packfile checksum SHAI alier C eesi 7 E 2 x 20 bytes Go e 7 packfile offsets size x 4 bytes large packfile offsets N x 8 bytes N is number of 4 byte offsets that have the high bit set this group only appears in indices of packfiles larger than 2G Jon trailer 2 x 20 bytes Dans les 2 formats la table de routage fanout est simplement un mani re plus rapide de trouver dans le fichier d index l offset d un SHA particulier Les tables offset shal sont tri es par valeurs shal cela permet les recherches binaires sur cette table et la table fanout pointe vers la table offset shal de fa on sp cifique pour que la part de la derni re table 117 Git Community Book qui convertie tous les hash commen ant par un bit en particulier afin qu ils puissent tre trouv s en vitant les 8 it rations de la recherche binaire Dans la version les offsets et SHAs sont au m me endroit alors que dans la version 2 il y a des tables s par s pour les SHAs les checksums CRC et les offsets Les checksums SHAs pour le fichier d index et le packfile se trouvent la fin de chacun de ces fichiers I
74. olved et git cr era un commit pour vous et continuera d appliquer les patches restant dans la boite mail Le r sultat final sera une s rie de commits un par patch pr sent dans la boite mail originale avec l auteur et le message du commit venant du mail correspondant chaque patch PERSONNALISER GIT git config Changer l Editeur git config global core editor emacs Chapter 5 Git Avanc Ajouter des Alias git config global alias last cat file commit HEAD git last tree c85fbd1996b8e7e5eda1288b56042c0cdb91836b parent cdc9a0a28173b6ba4aca 0eb34f5aabb39980735 author Scott Chacon lt schacon gmail com gt 1220473867 0700 committer Scott Chacon lt schacon gmail com gt 1220473867 0700 fixed a weird formatting problem git cat file commit HEAD tree c85fbd1996b8e7e5eda1288b56042c0cdb91836b parent cdc9a0a28173b6ba4aca 0eb34f5aabb39980735 author Scott Chacon lt schacon gmail com gt 1220473867 0700 committer Scott Chacon lt schacon gmail com gt 1220473867 0700 fixed a weird formatting problem Ajouter de la Couleur Voir toutes les options color dans la documentation de git config git config color branch auto git config color diff auto git config color interactive auto git config color status auto Ou vous pouvez tous les activer avec l option color ui git config color ui true 91 Git Community Book 92 Template de Commit git config commit template etc git commit template
75. omprendre comment utiliser Git Chapter Introduction L Objet Blob Un blob stocke g n ralement le contenu d un fichier 5b1d3 ifndef REVISION_H define REVISION_H include parse options h define SEEN Clu lt lt define UNINTERESTING lu define TREESAME lu lt lt 2 Vous pouvez utiliser git show pour examiner le contenu de n importe quel blob Si nous avons le SHAI d un blob nous pouvons l examiner comme ceci git show 6ff87c4664 Note that the only valid version of the GPL as far as this project is concerned is _this_ particular version of the license ie v2 not v2 2 or v3 x or whatever unless explicitly otherwise stated Un blog n est rien de plus qu un morceau de donn es binaires Il ne fait r f rence rien et n a aucun attribut m me pas un nom de fichier Puisque le blob est enti rement d fini par ses donn es si 2 fichiers dans un r pertoire ou dans diff rentes versions du d p t ont le m me contenu ils partageront alors le m me objet blob Cet objet est totalement ind pendant de l endroit o il se trouve dans la hi rarchie des dossiers et renommer un fichier ne change pas l objet auquel ce fichier est associ Git Community Book L Objet Tree Un tree est un simple objet qui contient une liste de pointeurs vers des blobs et d autres trees il repr sente g n ralement le contenu d un r pertoire ou sous r pertoire blob 5b1d3 README ree Free cacos
76. onfigur une cl GPG dans votre fichier de configuration vous pouvez faire la m me chose de cette fa on git tag u lt gpg key id gt stable 1 1b2e1d63ff 49 Git Community Book Chapter 4 50 Usage Interm diaire IGNORER DES FICHIERS Un projet g n rera souvent des fichiers que vous ne voulez pas surveiller avec git En g n ral ceux sont des fichiers qui ne servent que compilation de programme ou des fichiers temporaires cr s par votre diteur de texte Ne pas surveiller ces fichiers revient ne pas les inclure avec git add Mais il devient tr s vite ennuyant d avoir tous ces fichiers non suivis ils rendent git add et git commit a pratiquement inutile et ils se montrent dans chaque sortie de git status Vous pouvais demander git d ignorer certains fichiers en cr ant un fichier nomm gitignore dans la racine de votre r pertoire de travail Ce fichier contiendra ce type d information Les ligne commen ant par sont des commentaires Ignorer tous les fichiers nomm s foo txt foo txt Ignorer tous les fichiers html Chapter 4 Usage Interm diaire html l exception de foo html qui est maintenu la main foo html Ignorer les objets et les archives oa Voir gitignore pour une explication plus d taill e de la syntaxe Vous pouvez aussi placer gitignore dans un autre sous r pertoire de votre r pertoire de travail ses r gles s appliqueront alors seulement au r pe
77. ont pas t ajout s l index En d autres mots apr s cette commande le r sultat de git diff et git diff cached sera vide 73 Git Community Book Si vous ne voulez restaurer qu un seul fichier par exemple hello rb utiliser plut t git checkout git checkout hello rb git checkout HEAD hello rb La premi re commande restaure hello rb la version de l index afin que git diff hello rb ne retourne aucune diff rence La seconde commande restaurera hello rb la version de la r vision HEAD afin que git diff hello rb et git diff cached hello rb ne retourne aucune diff rence R parer une erreurs committ e Si vous avez d j committ ce que vous n auriez pas du il y a 2 fa ons fondamentalement diff rentes de r gler le probl me vous pouvez cr er un nouveau commit qui annule les changements du dernier commit C est la mani re correcte de s y prendre si votre erreur est d j publique 2 Vous pouvez revenir en arri re et modifier l ancien commit Vous ne devriez jamais faire a si vous avez d j rendu l historique publique git n est pas con u pour que l historique d un projet change et ne peut pas effectuer correctement des merges r p t s sur depuis branche qui a vu son historique changer R parer une erreur sur un nouveau commit Il est facile de cr er un nouveau commit qui annule les changements d un commit pr c dent utilisez la commande git revert avec la r f rence du mauvais
78. ou but they should match the HEAD commit object names of your repositories You can check it by running git ls remote a Pulling down the submodules is a two step process First run git submodule init to add the submodule repository URLs to git config git submodule init Now use git submodule update to clone the repositories and check out the commits specified in the superproject 97 Git Community Book 98 git submodule update cd a ls a cgit d txt One major difference between git submodule update and git submodule add is that git submodule update checks out a specific commit rather than the tip of a branch It s like checking out a tag the head is detached so you re not working on a branch git branch no branch master If you want to make a change within a submodule and you have a detached head then you should create or checkout a branch make your changes publish the change within the submodule and then update the superproject to reference the new commit git checkout master or git checkout b fix up then echo adding a line again gt gt a txt git commit a m Updated the submodule from within the superproject git push Cdi git diff diff git a a b a Chapter 5 Git Avanc index d266b98 261dfac 160000 a a b a 1 1 Subproject commit d266b9873ad50488163457f025db7cdd9683d88b Subproject commit 261dfac35cb99d380eb966e102c1197139F7fa24 g
79. ous L ast risque signale la branche su laquelle vous vous trouvez Tapez git checkout experimental pour passer sur la branche experimental Editez maintenant un fichier committer le changement et revenez sur la branche master C diter un fichier git commit a git checkout master Vous pouvez v rifier que le changement que vous venez de faire n est plus visible puisqu il a t fait sur la branche experimental et que nous sommes revenus sur la branche master Vous pouvez faire un changement diff rent sur la branche master C diter un fichier git commit a 27 Git Community Book 28 cet instant les 2 branches ont diverg avec des changements diff rents faits dans chacune d elles Pour fusionner merger les changements effectu s dans la branche experimental sur la branche master lancez git merge experimental Si les changements ne cr ent pas de conflit vous avez fini S il y a des conflits un marquage sera laiss dans les fichiers probl matiques pour vous montrer le conflit git diff vous montrera ces marquages Une fois que vous aurez dit les fichiers pour r soudre les conflits git commit a committera le r sultat du merge Enfin gitk vous montrera une jolie repr sentation graphique de l historique obtenu Maintenant vous pouvez effacer la branche experimental avec git branch d experimental Cette commande s assure que les changement de la branche experime
80. ouvez n assembler qu une partie d un fichier modifi Si vous avez dit un fichier et ne voulez committer qu une partie des modifications et laisser les autres modifications dans un tat inachev ou s parer les commits de documentation de ceux des changements plus cons quents vous pouvez utiliser git add i pour le faire facilement Ici j ai assembl quelques changements au fichier book_index_template html mais pas tous staged unstaged path 1 4 0 nothing assets stylesheets style css 2 20 7 3 4 lLayout book_index_template html 3 7 7 nothing layout chapter_template html 4 3 3 nothing script pdf rb 52 unchanged 121 0 text 14_Interactive_Rebasing _ Interactive_Rebasing markdown 6 unchanged 85 text 15_Interactive_Adding _ Interactive_Adding markdown 63 Git Community Book 64 Quand vous avez terminer de modifier votre index avec git add i il vous suffit de quitter 7 quit et de lancer git commit pour committer les changements assembl s Souvenez vous de ne pas lancer git commit a cela effacerait tous les pr cieuses s lections que vous avez faites dans le mode interactif et committera tout d un coup LE CACHE STASHING Quand vous tes au milieu d une grosse modification il se peut que vous trouviez un norme bug qui doit tre corrig rapidement Vous aimeriez le corriger avant de continuer vos modifications Vous pouvez utiliser git stash pour sauvegarder l tat actuel de votre trav
81. par exemple git format patch origin produira un liste num rot e de fichiers pr sent dans le r pertoire actuel avec un l ment de la liste pour chaque patch de la branche courante qui n est pas pr sent dans la branche d origine distante origin HEAD Vous pouvez ensuite importer ce texte dans votre client mail et l envoyer manuellement Cependant si vous avez beaucoup de patches envoyer en m me temps il est pr f rable d utiliser le script git send email pour automatiser le processus Consultez la mailing list du projet concern pour savoir comment ces patches sont habituellement g r s 89 Git Community Book 90 Importer les patches dans un project Git fournit aussi un outil nomm e git am am signifiant apply mailbox pour important un s rie de mails contenant des patches Sauvegardez tous les messages des mails contenant les patches dans l ordre dans une seule boite mail disons patches mbox et lancez git am 3 patches mbox Git appliquera chaque patch dans l ordre quand un conflit est trouv il s arr tera et vous pourrez r parer les conflits comme d crit dans lt lt resolving a merge R soudre un merge gt gt L option 3 dit git d effectuer un merge si vous pr f rer juste laisser votre branche et index inchang s vous pouvez omettre cette option Une fois que l index est mis jour avec la r solution du conflit au lieu de cr er un nouveau commit lancez juste git am res
82. pitre s enfouit dans les d tails concernant le stockage physique des objets avec Git Tous les objets sont stock s comme du contenu comprim s par leur valeur SHA Il contiennent le type d objet la taille et le contenu au format gzip Git garde les objets dans 2 formats les objets d tendus et les objets packag s Les Objets D tendus Le format le plus simple concerne les objets d tendus Ce n est que des donn es comprim es stock es dans un seul fichier sur le disque Chaque objet est crit dans un fichier s par 107 Git Community Book Si le SHA de l objet est ab 4d884140f7bOcf8bbf86d6883869f16a46f65 alors le fichier sera stock dans le chemin suivant GIT_DIR objects ab 04d884140f7bOcf8bbF86d6883869f16a46f65 Il r cup re les 2 premiers caract res et les utilisent comme sous r pertoire comme a il n y a jamais trop d objets dans le m me dossier Le nom du fichier est alors compos des 38 caract res restant En utilisant cette impl mentation Ruby du stockage avec Git nous pouvons examiner simplement comment les donn es d un objet sont stock es def put_raw_object content type size content length to_s header type size body store header content shal path Digest SHA1 hexdigest store git_dir sha1 271 sha1 2 40 if File exists path content Zlib Deflate deflate store FileUtils mkdir_p directory sha1 2 File open path w do IfI f write con
83. plut t cr un objet tag Les Objets Tags Si une de ces options a s ou u lt key id gt est pass en argument de la commande alors nous cr ons un objet tag qui n cessite un message tag A moins que l option m ou F soit fournie un diteur se lance pour que l utilisateur saisisse le message du tag Quand cela se produit un nouvelle objet est ajout la base de donn e objet de Git et la r f rence tag pointe vers cet objet tag plut t que sur le commit lui m me Ce concept est utile car vous pouvez maintenant signer le tag et v rifier plus tard que le commit correspond Vous pouvez cr er un objet tag comme ceci git tag a stable 1 1b2e1d63ff Il est possible de tagger n importe quel objet mais le taggage des objets commit est la pratique la plus courante Dans les sources du kernel Linux le premier objet tag fait r f rence a un tree plut t qu un commit Signature des Tags Si vous avez configur votre cl GPG vous pouvez facilement cr er des tags sign s Dans un premier temps vous devrez configurer l identifiant de votre cl dans votre fichier de configuration git config ou gitconfig Chapter 3 Utilisation Basique user signingkey lt gpg key id gt Vous pouvez aussi le configurer comme ceci git config global user signingkey lt gpg key id gt Maintenant vous pouvez cr er un tag sign en rempla ant juste le a par un s git tag s stable 1 1b2e1d63ff Si vous n avez pas c
84. quand vous vous trouverez avec la ligne de commande vous pourrez revenir sur ce commit pour en cr er deux ou plus nouveaux Disons que 21d80a5 modifie 2 fichiers fichier et fichier2 et que vous voulez le d couper en 2 commits s par s Vous pouvez faire ceci quand la recombinaison vous redonne la main avec la ligne de commande git reset HEADA git add fichierl git commit premi re partie du commit d coup git add fichier2 git commit seconde partie du commit d coup git rebase continue Et maintenant au lieu d avoir 5 commits vous en avez 6 60 Chapter 4 Usage Interm diaire La recombinaison interactive peut vous aider sur un dernier point utilise elle peut oublier des commits Si au lieu de s lectionner pick squash ou edit pour la ligne de commit vous effacez simplement la ligne alors le commit sera retir de l historique AJOUT INTERACTIF Il est vraiment int ressant de travailler et de visualiser l index de Git avec les ajouts interactifs Pour le d marrer tape simplement git add i Git vous montrera tous vos fichiers modifi s et leur tat gt git add i staged unstaged path 1 unchanged 4 assets stylesheets style css 2 unchanged 23 11 layout book_index_template html 3 unchanged 7 7 layout chapter_template html 4 unchanged 3 3 script pdf rb 5 unchanged 121 0 text 14_Interactive_Rebasing 0_ Interactive_Rebasing markdown Commands 1 status 2
85. re commit est 980e3ccdaac54a0d4de358f3fe5d718027d96aae git le reconnaitra aussi avec les cha ne suivante 98 e3ccdaac54a0d4de358f3fe5d718027d96aae 980e3ccdaac54a0d4 980e3cc Tant que le sha partiel est unique il ne peut pas tre confondu avec un autre ce qui serait vraiment invraisemblable si vous avez au moins 5 caract res git tendra le sha partiel pour vous 65 Git Community Book 66 Branche Remote ou Nom de Tag Vous pouvez toujours utiliser une branche un remote ou un nom de tag la place d un sha puisque qu ils ne sont que des pointeurs Si votre branche master est sur le commit 980e3 et que vous la publiez push sur origin et que vous l avez tagg e v1 0 alors toutes les r f rences suivantes sont quivalentes 980e3ccdaac54a0d4de358f3fe5d718027d96aae origin master refs remotes origin master master refs heads master v1 0 refs tags v1 0 Ce qui signifie que les commandes suivantes vous donneront le m me r sultat git log master git log refs tags v1 0 Sp cification de Date Le Log de R f rences que git conserve vous permettre de faire certaines choses localement comme master yesterday master 1 month ago Qui est un raccourci pour l o se trouver le sommet de la branche master hier etc Ce format peut montrer des sha diff rents sur des ordinateurs diff rents m me si la branche master est actuellement au m me niveau Chapter 4 Usage Interm diaire
86. roject to runcoderun 791ec6b updated grit gemspec 756a947 including code from github updates 3fa3284 whitespace dO1cffd whitespace aQe4a3d updated grit gemspec 7569d d including code from github updates Enfin vous pouvez inverser l ordre du log avec l option reverse COMPARER LES COMMITS GIT DIFF Vous pouvez g n rer les diff rences entres 2 version de votre projet en utilisant git diff git diff master test 38 Chapter 3 Utilisation Basique Cette commande produit une diff rence entre le sommet de 2 banches Si vous pr f rez trouver la diff rence de leur anc tre commun vous pouvez utiliser 3 points au lieu de 2 git diff master test git diff est un outils incroyablement utile pour trouver ce qui a chang entre 2 points dans l historique de votre projet ou pour voir quelle personne a essay d introduire une nouvelle branche etc Ce que vous committerez Vous utiliserez couramment git diff pour trouver les diff rences entre votre dernier commit votre index et votre r pertoire de travail courant Un usage courant est de lancer git diff ce qui vous montrera les changements dans le r pertoire de travail qui ne sont pas encore assembl s pour le prochain commit Si vous voulez voir ce qui est assembl pour le prochain commit vous pouvez lancer git diff cached ce qui vous montrera la diff rence entre l index et votre dernier commit ce que vous co
87. rtoire et sous r pertoire de l o il se trouve Le fichier gitignore peut tre ajout au d p t comme n importe quel autre fichier lancez juste git add gitignore and git commit comme d habitude cela est utile quand les cha nes d exclusion comme celle pour exclure les fichiers de compilation peuvent aussi tre utiles aux autres d veloppeurs clonant votre d p t Si vous voulez que la cha ne d exclusion n affecte que certains sous r pertoires plut t que tout le d p t pour un certain projet vous devrez alors peut tre mettre cette cha ne dans un fichier de votre d p t nomm git info exclude ou dans un des fichiers sp cifi s par la variable de configuration core excludesfile Certaines commandes git peuvent aussi prendre ces cha nes d exclusion directement comme argument de la ligne de commande Voir gitignore pour plus de d tails RECOMBINAISON REBASE Supposons que vous avez cr une branche mywork sur une branche de suivi distante origin git checkout b mywork origin 5I Git Community Book 9 mywork Maintenant travaillez un peu dessus en cr ant 2 commits vi fichier txt git commit vi autrefichier txt git commit Pendant ce temps quelqu un d autre travaille en cr ant aussi 2 nouveaux commits sur la branche d origine Cela signifie que les 2 branches origine et mywork ont avanc es et elle ont aussi diverg es 52 Chapter 4 Usage Interm diaire ce mo
88. s sa r ponse au tree initial tait un tree avec une capture de l tat du dossier qui a t enregistr par le premier commit Tous les objets sont stock s sous leur nom SHAI dans le r pertoire git Chapter 7 Fonctionnement Interne et Plomberie find git objects git objects git objects pack git objects info git objects 3b git objects 3b 18e512dba 79e4c8300dd 8aeb37f8e728b8dad git objects 92 git objects 92 b8b694ffb1675e5975148e1121810081dbdffe git objects 54 git objects 54 196cc2703dc165cbd373a65a4dcf22d50ae7f7 git objects aQ git objects aQ 423896973644771497bdc03eb99d5281615b51 git objects d git objects d0 492b368b66bdabf2ac1fd8c92b39d3db916e59 git objects c4 git objects c4 d59f390b9cfd4318117afde11d601c1085f241 et le contenu de ces fichiers n est que des donn es comprim es avec une ent te identifiant leur type et leur taille Le type peut tre un blob un tree un commit ou un tag Le commit le plus simple a trouver est le commit HEAD qui peut tre trouv dans git HEAD cat git HEAD ref refs heads master Comme vous pouvez le voir ceci nous dit dans quelle branche nous nous trouvons et il nous le dit en nommant le fichier dans le r pertoire git qui lui m me contient le nom SHAI r f rant l objet commit qui peut tre examin avec cat file cat git refs heads master c4d59f390b9cfd4318117afde11d601c1085f241 git cat file t c4d59f39 commit git cat file commit c4d5
89. s sur un commit qui pose un probl me qui ne concerne pas notre d buggage lancez git bisect visualize qui affichera gitk et marquera les commits qu il choisira avec une tiquette bisect Choisissez un commit qui vous parait s r notez l identifiant du commit et r cup rez le avec git reset hard fb47ddb2db 87 Git Community Book puis testez lancez bisect good ou bisect bad comme il convient et continuez TROUVER LES PROBL MES GIT BLAME La commande linkto git blame 1 est vraiment utile pour savoir qui a modifi quelle partie du fichier Si vus lancez simplement git blame nom _du_fichier vous obtiendrez une liste du dernier sha du commit de la date et de l auteur de chaque ligne du fichier git blame shal_file c Ofcfd160 Linus Ofcfd160 Linus 1688557 Junio a733cb60 Linus 8e440259 Peter 8e440259 Peter 8e440259 Peter 8e440259 Peter f35a6d3b Linus Torvalds Torvalds C Hamano Torvalds Eriksen Eriksen Eriksen Eriksen Torvalds 70f5d5d3 Nicolas Pitre 2005 04 18 2005 04 18 2005 06 27 2005 06 28 2006 04 02 2006 04 02 2006 04 02 2006 04 02 2007 04 09 2008 02 28 13 13 03 14 14 14 14 14 2i 00 04 04 353 21 44 44 44 44 20 25 0700 0700 0700 0700 0200 0200 0200 0200 0700 0500 8 47 9 include 10 include 11 include 12 include 13 include 14 include 15 include 16 include 17 include cach
90. sck c define DIRENT_SORT_HINTCde de gt d_ino builtin fsck c define MAX_SHA1_ENTRIES 1024 builtin fsck c if CSORT_DIRENT Chapter 4 Usage Interm diaire Vous pouvez aussi rechercher les lignes qui ont un terme et chacun de ces 2 termes par exemple si vous voulez voir o sont d finies les constantes qui ont soit PATH ou MAX dans leur nom git grep e define and C e PATH e MAX abspath c define MAXDEPTH 5 builtin blame c define MORE_THAN_ONE_PATH lu lt lt 13 builtin blame c define MAXSG 16 builtin describe c define MAX_TAGS CFLAG_BITS 1 builtin fetch pack c define MAX_IN_VAIN 256 builtin fsck c define MAX_SHA1_ENTRIES 1024 R PARATION AVEC GIT RESET CHECKOUT ET REVERT Git fournit plusieurs m thodes pour r parer vos erreurs durant votre d veloppement Choisir la bonne m thode d pend si si vous avez committ ou non votre erreur et si elle a t committ e si cette erreur a d j t r cup r e par un autre d veloppeur R parer une erreur non committ e Si vous vous Etres embrouillez dans votre r pertoire de travail mais que vous n avez pas encore committ vos erreurs vous pouvez retrouver l int grit de votre r pertoire dans l tat qu il tait apr s le dernier commit en utilisant git reset hard HEAD Cela effacera toutes les modifications que vous avec ajout l index git et aussi les changements qui sont pr sents dans votre r pertoire de travail mais qui n
91. t size_t length int prot int read cache c 1178 mmap xmmapCNULL mmap_size PROT_READ PROT_WRITE MAP_ refs c 1345 log_mapped xmmapC NULL mapsz PROT_READ MAP_PRIVATE logfd shal_file c 377 map xmmapCNULL mapsz PROT_READ MAP_PRIVATE fd shal_file c 479 idx_map xmmapCNULL idx_size PROT_READ MAP_PRIVATE fd shal_file c 780 win gt base xmmapCNULL win gt len Chapter 4 Usage Interm diaire shal_file c 1076 map xmmapCNULL size PROT_READ MAP_PR shal_file c 2393 buf xmmap NULL size PROT_READ MAP_PRIVATE fd wrapper c 89 void xmmap void start size_t length Sj nous sommes seulement int ress par le nom du fichier nous pouvons utiliser l option name only gt git grep name only xmmap config c diff C git compat util h read cache c refs c shal_file c wrapper c Nous pouvons aussi voir combien lignes correspondent dans chaque fichier avec l option c gt git grep c xmmap config ci1 ditt oes git compat util h 1 read cache c 1 refs c 1 shal_file c 5 wrapper c 1 Maintenant si je veux voir dans quelle version de git ce code a t utilis je pourrai ajouter la r f rence du tag la fin comme ceci git grep xmmap v1 5 0 v1 5 config c contents xmmapCNULL st st_size PROT_READ v1 5 0 diff c s gt data xmmapC NULL s gt size PROT_READ MAP_PRIVATE fd v1 5 0 git compat util h static inline void xmmap void start size_t Length 71 Git Com
92. t git cvsserver manpage to dash free syntax diff git a Documentation git cvsserver txt b Documentation git cvsserver txt index c2d3c99 785779e 100644 a Documentation git cvsserver txt b Documentation git cvsserver txt 11 7 11 7 SYNOPSIS SSH verse export CVS_SERVER git cvsserver export CVS_SERVER git cvsserver cvs d ext user server path repo git co lt HEAD_name gt pserver etc inetd conf 33 Git Community Book Statistique sur les Log Vous pouvez rajouter l options stat git log pour obtenir la liste des fichiers qui ont t chang s dans un commit et afficher combien de lignes ont t rajout ou retir de chaque fichier git log stat commit dba9194a49452b5f093b96872e19c91b50e526aa Author Junio C Hamano lt gitster pobox com gt Date Sun Aug 17 15 44 11 2008 0700 Start 1 6 0 X maintenance series Documentation RelNotes 1 6 0 1 txt 15 RelNotes 2 2 files changed 16 insertions 1 deletions Formater le Log Vous pouvez formater la sortie du log pour afficher ce que vous voulez L option pretty peut servir pour afficher les log avec un format pr r gl comme oneline git log pretty oneline a6b444 570558a5f31ab508dc2a24dc34773825f dammit this is the second time this has reverted 49d77 72783e4e9f12d1bbcacc45e7a15c800240 modified index to create refs heads if it is not 9764edd90cf9a423c9698a2f1e814F16F0111238 Add diff lcs dependency elbal
93. tant de savoir que la taille sp cifi e dans les donn es de l ent te n est pas la taille des donn es qui suivent mais la taille des donn es une fois d comprim s C est pourquoi les offset de l index du packfile sont si utiles sinon vous devriez d compresser chaque objet juste pour savoir quand la prochaine ent te commence 121 Git Community Book 122 La partie donn e n est qu un stream zlib pour des types d objet non delta pour la repr sentation de 2 objets delta la portion de donn e contient quelque chose qui identifie de quel objet de base d pend cet objet delta et le delta appliquer sur l objet de base pour retrouver cet objet ref delta utilise un hash de 20 octets pour l objet de base au d but des donn es alors que ofs delta stocke un offset l int rieur du m me packfile pour identifier l objet de base Dans chacun des cas vous devez suivre 2 contraintes importantes si vous voulez r impl menter ce fonctionnement e la repr sentation du delta doit tre bas e sur quelqu autre objet l int rieur du m me packfile e l objet de base doit tre de m me type sous jacent blob tree commit ou tag RAW GIT Here we will take a look at how to manipulate git at a more raw level in case you would like to write a tool that generates new blobs trees or commits in a more artificial way If you want to write a script that uses more low level git plumbing to do something new here are some of the tools you ll need
94. te o dans le syst me auquel ils ont acc s et les laisser acc der ce d p t gr ce une simple connexion ssh Par exemple disons que vous avez un d p t que vous voulez h berger Vous pouvez l exporter comme un d p t nu puis le copier sur votre serveur avec scp comme ceci git clone bare home user mondepot git tmp mondepot git scp r tmp mondepot git monserveur com opt git mondepot git Puis quelqu un d autre avec un compte ssh sur monserveur com peut cloner votre d p t via git clone myserver com opt git myrepo git Cette commande leur demandera seulement leur mot de passe ssh ou leur cl publique suivant la configuration de l authentification ssh Acc s multi utilisateurs en utilisant Gitosis Si vous ne voulez pas configurer des comptes diff rents pour chaque utilisateur vous pouvez utiliser un outils nomm Gitosis Dans gitosis il y a un fichier authorized_keys qui contient les cl s publiques de toutes les personnes autoris es a 79 Git Community Book acc der au d p t ensuite tout le monde peut utiliser l utilisateur git pour publier et r cup rer les modifications sur le d p t Poour plus d informations sur Gitosis Installing and Setting up Gitosis 80 Chapter 5 Git Avanc Chapter 5 Git Avanc CR ATION DE NOUVELLES BRANCHES VIDES Parfois vous voudrez peut tre garder certaines branches dans votre d p t qui ne partagent pas d anc tre en commun avec votre code normal
95. tent end end return shal end 108 Chapter 7 Fonctionnement Interne et Plomberie Les Objets Packag s Le packfile est l autre format de stockage d objet Depuis que Git stocke chaque version de chaque fichier dans un objet s par il peu rapidement devenir inefficace avec le format pr c dent Imaginez avoir un fichier long de quelques milliers de lignes et si on change une ligne git enregistrera un second fichier dans son int grit cela serait un grand gaspillage d espace Afin de sauver cet espace Git utilise le packfile C est une format o Git ne va sauvegarder que la partie du fichier qui a chang dans le second fichier avec un pointeur vers le fichier similaire Quand les objets sont crits sur le disque le format d tendu est souvent utilis puisque ce format est plus simple d acc s Cependant vous voudrez certainement sauver de l espace en packageant les objets cela se fait avec la commande git gc Elle utilisera une heuristique plut t compliqu e pour d terminer quels fichiers sont similaires et basera les delta sur cette analyse Nous pouvons avoir de multiple packfiles ils peuvent tre re packag s si n cessaire git repack ou d packag s en de multiples fichiers git unpack objects relativement facilement Git crira aussi un fichier d index pour chaque packfile il sera bien plus petit et contiendra les offset du packfile pour trouver des objets sp cifiques plus rapidement en utilisant le SHA Le d
96. ter Normalement quand le sommet de la branche d un d p t publique est modifi il est modifi pour pointer vers un descendant du commit ver lequel il pointait avant En for ant la publication dans cette situation vous cassez cette convention N anmoins c est une bonne pratique pour les gens qui ont besoin de publier simplement une s rie de patches des travaux en cours et c est un compromis acceptable tant que vous pr venez les autres d veloppeurs que vous comptez g rer la branche de cette fa on Il est aussi possible qu une publication choue de cette fa on quand d autres personnes ont le droit de publier sur le m me d p t Dans ce cas la solution la plus correcte est de retenter la publication apr s avoir mis jour votre travail soit par un git pull soit par un git fetch suivi d une recombinaison rebase voir la prochaine partie et gitcvs migration pour plus de d tails TAG AVEC GIT Les Tags L gers Vous pouvez cr er un tag qui r f rence un commit particulier de git en lan ant git tag en sp cifiant le nom du tag et le nom SHAI du commit tagger en options 47 Git Community Book 48 git tag stable 1 1b2e1d63ff Apr s a nous pouvons utilis stable pou faire r f rence au commit 1b2el d63ff Ceci est un tag l ger car aucune branche n a t cr e durant le processus Si vous voulez aussi rajouter un commentaire a ce tag et le signer avec un m thode cryptographique alors nous allons
97. ter dans la commande ci dessus elle n est pas n cessaire car c est l option par d faut 41 Git Community Book 42 La commande pull travaille donc en 2 tapes elle r cup re les changements d une branche distante et merge ces changements dans la branche courante Quand vous travaillez dans une petite quipe soud e il est courant que tous interagissent tr s souvent avec le m me d p t En d finissant un raccourci pour le d p t distant nous pouvons rendre ces op ration plus simples git remote add bob home bob mondepot Avec a Alice peut effectuer la premi re op ration seulement en utilisant la commande git fetch elle ne mergera pas les modifications avec sa propre branche git fetch bob Contrairement la version longue quand Alice r cup re fetch les donn es de Bob en utilisant un raccourci configur avec git remote alors ce qui est r cup r est stock dans une branche de suivi distant dans notre cas bob master Donc maintenant git log p master bob master montre la liste de tous les changements que Bob a fait depuis qu il a cr une branche depuis la branche master d Alice Apr s avoir examin ces changements Alice peut les merger dans sa branche master git merge bob master Ce merge peut aussi tre fait en r cup rant les donn es depuis sa propre branche de suivi distant comme ceci git pull remotes bob master Git r cup re toujours les merges dans la
98. test commits visibles depuis test mais pas master master test commits visibles pour test ou master mais pas les 2 since 2 weeks ago commits des 2 derni res semaines Makefile commits qui modifient le Makefile fs commits qui modifient les fichiers sous fs S foo commits qui ajoutent ou effacent des donn es contenant la cha ne foo no merges ne pas montrer les commits de merge Et vous pouvez bien s r combiner toutes ces options la requ te suivante trouve tous les commits depuis v2 5 qui touchent le Makefile et tous les fichier sous fs git log v2 5 Makefile fs Git log vous montrera la liste de chaque commit le plus r cent d abord qui correspond aux arguments donn s la commande de log commit 491239170cb1463c7c3cd970862d6de636ba787 Author Date Matt McCutchen lt matt mattmccutchen net gt Thu Aug 14 13 37 41 2008 0400 git format patch documentation clarify what cover letter does commit 7950659dc9ef7F2b50b18010622299c508bfdfc3 Chapter 3 Utilisation Basique Author Eric Raible lt raible gmail com gt Date Thu Aug 14 10 12 54 2008 0700 bash completion git apply should use fix not strip Bring completion up to date with the man page Vous pouvez aussi demander a git de vous montrer les patches git log p commit da9973c6fF9600d90e64aac647f3ed22dfd692F70 Author Robert Schiele lt rschiele gmail com gt Date Mon Aug 18 16 17 04 2008 0200 adap
99. tomatiquement git laisse l index et le tree de travail dans un tat sp cial vous donnant toutes les informations dont vous aurez besoin pour vous aider r soudre le merge Les fichiers en conflits sont marqu s sp cialement dans l index donc jusqu que vous ayez r solu le probl me et mis jour l index git commit ne fonctionnera pas git commit file txt needs merge De plus git status vous donnera la liste de ces fichiers non merg s et les fichiers contenant des conflits auront ces conflits marqu s comme ceci lt lt lt lt lt lt lt HEAD file txt Hello world Goodbye gt gt gt gt gt gt gt 79 6da35a11db4580b80ae27e8d65caf5208086 file txt Vous n avez plus qu diter ces fichier pour r soudre les conflits puis git add file txt git commit Notez que le message du commit sera d j rempli pour vous avec quelques informations propos du merge Normalement vous pouvez juste laisser ce message inchang mais vous voudrez peut tre ajouter un commentaire additionnel si vous les d sirez Chapter 3 Utilisation Basique Cette partie contient tout ce que vous avec besoin de savoir pour r soudre un merge simple Mais git vous fournira aussi plus d information pour vous aider r soudre les conflits Annuler un merge Si vous tes bloqu s et d cid s de laisser tomber en jetant tout vos brouillons par la fen tre vous pouvez toujours revenir l tat o vous vous trouviez avant le merge
100. types h 100644 2ade97b2574a9f77e7ae4002a4e07a6a38e46d07 xdiff xutils c 100644 dSde8292e05e7c36c4b68857c1cF9855e3d2f70a xdiff xutils h Dans une documentation plus ancienne vous pourrez voir l index appel cache du r pertoire ou juste cache L index comporte 3 propri t s importantes L index contient toutes les informations n cessaire pour g n rer un unique d termin uniquement objet tree Par exemple le lancement de git commit g n re un objet tree depuis l index le stocke dans la base de donn e objet et l utilise comme l objet tree associ au nouveau commit L index permet une comparaison rapide entre les objet tree qu il d finit et le tree de travail Il fait ceci en stockant des informations compl mentaires pour chaque entr e comme la date de derni re modification Ces donn es ne sont pas affich es ci dessus et ne sont pas stock es dans l objet tree cr mais elles peuvent tre utilis es pour d terminer rapidement quels fichiers du r pertoire du travail diff rent de ce que sont stock s dans l index et donc permet git de gagner du temps sans avoir besoin de lire toutes les donn es pour ce genre de fichiers pour conna tre les changements Il peut tre efficacement repr senter les information propos des conflits de merge entre diff rentes version des objets tree permettant chaque chemin de fichier d tre associ avec suffisament d information propos des tree impliqu s dans la
101. update 3 revert 4 add untracked 5 patch 6 diff 7 quit 8 help What now gt Dans ce cas nous pouvons voir 5 fichiers modifi s qui n ont pas encore t s ajout s l index unstaged et le nombre de lignes en plus ou en moins pour chacun d eux Nous trouvons aussi un menu interactif avec les possibilit s de cet outils Si nous voulons rajouter les fichiers dans l index nous pouvons taper 2 ou u pour le mode de mise jour update Apr s nous devons s lectionner les fichiers que nous voulons rajouter l index en saisissant les num ros de ces fichiers dans ce cas 1 4 6l Git Community Book What now gt 2 staged unstaged path 1 unchanged 4 0 assets stylesheets style css ras unchanged 23 11 Layout book_index_template html 3 unchanged 7 7 lLayout chapter_tempLate html 4 unchanged 3 3 script pdf rb 5 unchanged 121 0 text 14_Interactive_Rebasing _ Interactive_Rebasing markdown Update gt gt 1 4 staged unstaged path als unchanged 4 assets stylesheets style css Por unchanged 23 11 layout book_index_template html 38 unchanged 7 7 layout chapter_template html 4 unchanged 3 3 script pdf rb 5 unchanged 121 0 text 14_Interactive_Rebasing _ Interactive_Rebasing markdown Update gt gt Si je presse entr e je reviendrai au menu principal o je peux voir que l tat des fichiers a chang What now gt status staged unstaged path 1 4 0 nothing assets stylesheets style css
102. visible in the submodule s reflog This is not the case if you did not commit your changes 100 Chapter 6 Travailler avec Git GIT SUR WINDOWS mSysGit D PLOYER AVEC GIT Capistrano et Git GitHub Guide on Deploying with Cap Git and Capistrano Screencast Chapter 6 Travailler avec Git 10 Git Community Book 102 INT GRATION DE SUBVERSION MIGRATION DEPUIS UN AUTRE SCM Vous avez d cid de migrez depuis un autre syst me de contr le de version et convertir l int gralit de votre projet vers Git Comment le faire facilement Importation depuis Subversion Git est fournit avec un script nomm git svn qui est une commande de clonage qui importe un d p t subversion dans un nouveau d p t git Il existe aussi un outil gratuit sur le service GitHub qui fera cette manipulation pour vous git svn clone http my project googlecode com svn trunk new project Ceci vous donnera un nouveau d p t Git avec tout l historique du d p t Subversion original Cela peut prendre beaucoup de temps puisque qu il d marre avec la version du projet subversion puis v rifie et commit localement chaque r vision une par une Importation depuis Perforce Dans le r pertoire contrib fast import vous trouverez le script git p4 C est un script python qui importera un d p t Perforce pour vous git git contrib fast import git p4 clone depot project main all myproject Chapter 6 Travailler avec Git Importation d
Download Pdf Manuals
Related Search
Related Contents
1 - 鎌倉製作所 G:\Marilene\New Folder\Capa esf6521low esf6521lox máquina de lavar loiça DJ-CH20/27 全機種共通 セットモードについて Xandros Desktop User Guide - Linux Open Documentation RSP Inline Finishing con RSP Easy Copyright © All rights reserved.
Failed to retrieve file