linux:memo_git
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:memo_git [24/06/2009 18:05] – daniel | linux:memo_git [21/12/2012 11:23] (Version actuelle) – aj qq Commandes courantes daniel | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| Git est un gestionnaire de versions (comme svn, cvs ou d' | Git est un gestionnaire de versions (comme svn, cvs ou d' | ||
| - | Bonne doc en français | + | Un bon résumé de git et de son fonctionnement |
| - | Mais, parfois, la centralisation | + | Avant de se lancer, il vaut mieux lire au moins les chapitres 1 et 2 du livre pro git http:// |
| + | * workspace : le répertoire courant, changer de branche revient à faire un échange de snapshots de ce répertoire (ou d'une partie), pas à en changer (par opposition à svn où on passe de trunk à branche/ | ||
| + | * index (ou stage) : la liste de ce qui se passera au prochain commit. Contrairement à svn on peut faire un commit de plusieurs fichiers, mais pas forcément dans leur état courant, on commit l' | ||
| + | * local repository : la base git locale (qui contient tout l' | ||
| + | * remote repository : un dépôt distant, il peut y en avoir plein, et on peut avoir des branches qui pointent vers différents dépôt. | ||
| + | * stash : ça on peut s'en passer dans un 1er temps, même si c'est pratique. C'est un espace " | ||
| + | |||
| + | Résumé des commandes git | ||
| + | * graphique interactif efficace : http:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | * chez [[http:// | ||
| + | |||
| + | La référence (les pages man) : http:// | ||
| + | |||
| + | Il y a aussi le [[http:// | ||
| + | |||
| + | Des alias intéressant sur https:// | ||
| + | |||
| + | La page de doc du plugin netbeans http:// | ||
| + | |||
| + | Tip & tricks | ||
| + | * http:// | ||
| + | |||
| + | ===== Commandes courantes ===== | ||
| + | * Modifier le dernier message de commit '' | ||
| + | * voir les serveurs distants (ajouter -v pour avoir les urls) '' | ||
| + | * editer la conf par defaut '' | ||
| + | |||
| + | ===== Dépôt centralisateur ===== | ||
| + | |||
| + | Le décentralisé c'est très bien, mais parfois un dépôt qui centralise est bien pratique, et c'est aussi possible. | ||
| Cf http:// | Cf http:// | ||
| Ligne 11: | Ligne 43: | ||
| Ensuite, quelques liens utiles | Ensuite, quelques liens utiles | ||
| * http:// | * http:// | ||
| - | * http:// | ||
| - | * http:// | ||
| * http:// | * http:// | ||
| + | * http:// | ||
| - | ===== Opérations courantes ===== | + | Pour créer un dépôt centralisé avec gitosis : |
| - | http://www.kernel.org/pub/software/scm/git/docs/user-manual.html# | + | |
| + | * http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way | ||
| + | |||
| + | Ce qui suit est assez ancien et à prendre avec des pincettes (m' | ||
| + | |||
| + | ==== Ajout d'un dépôt local sur le serveur ==== | ||
| + | Pour créer le dépôt, faut d' | ||
| + | writable du group qui va bien (pour déclarer qui aura le droit d' | ||
| <code bash> | <code bash> | ||
| - | # transformer | + | # Si ce n'est déjà fait on récupère une copie localement (coté client donc) |
| + | git clone git@< | ||
| + | cd gitosis-admin | ||
| + | joe gitosis.conf | ||
| + | # ensuite on envoie ce fichier | ||
| + | git commit -m 'ajout du dépot machintruc' | ||
| + | git push | ||
| + | # et on peut balancer notre nouveau | ||
| + | cd / | ||
| + | # si le dépot local git n' | ||
| git init | git init | ||
| - | # ajouter | + | # on ajoute |
| git add . | git add . | ||
| - | # ajouter un alias pour un projet sur un serveur | + | git commit -a -m ' |
| - | git remote add alias_de_ce_projet_sur_ce_serveur user@server:path/ | + | # on créé le dépot |
| - | # y envoyer les fichiers | + | git remote add origin git@<server>:< |
| - | git push alias_de_ce_projet_sur_ce_serveur la_branche | + | # et on envoie sur le depot origin notre branche locale master |
| + | git push origin master | ||
| + | # pour les push suivant, on pourra faire un simple | ||
| + | </ | ||
| - | # commit | + | ==== Rendre un dépôt public ==== |
| - | git commit | + | Pour que des anonymes puissent cloner un dépôt, il faut dire à git-daemon qu'il peut l' |
| - | # commit de tous les fichiers | + | <code bash> |
| - | git commit -m ' | + | cd <le --base-path spécifié dans / |
| - | # envoi de tous les derniers commit (depuis | + | touch < |
| + | # et pour retirer ces droits de lecture anonyme il suffit | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Script de démarrage ==== | ||
| + | Avant le paquet git-daemon-run, | ||
| + | <code bash> | ||
| + | aptitude install | ||
| + | ln -s /usr/bin/sv / | ||
| + | # et on va modifier / | ||
| + | </ | ||
| + | |||
| + | ===== Exemples ===== | ||
| + | Ci dessous qq démos, pour vous faire une idée. | ||
| + | |||
| + | Les ligne qui commencent par "#>" | ||
| + | |||
| + | |||
| + | |||
| + | ==== Un local, plusieurs distants ==== | ||
| + | |||
| + | J'essaie ici d' | ||
| + | |||
| + | Voici ce que j'ai fait (un seul serveur ici, mais si ça marche pour A...) | ||
| + | <code bash> | ||
| + | mkdir serveurA | ||
| + | cd serveurA/ | ||
| + | h=$(basename $(pwd)); touch $h a c; echo $h > c; | ||
| + | git init --bare | ||
| + | |||
| + | # un clones (pour vérifier que le push sur les serveurs est bien ce qui est attendu) | ||
| + | cd .. | ||
| + | git clone serveurA cloneA | ||
| + | # et aussi pour le peuplement initial | ||
| + | cd cloneA | ||
| + | h=$(basename $(pwd)); touch $h c1 c2; echo $h > c2; | ||
| + | git add . | ||
| + | git commit | ||
| + | git push origin master | ||
| + | |||
| + | # et un dépôt local | ||
| + | cd .. | ||
| + | mkdir loc | ||
| + | cd loc | ||
| + | git init | ||
| + | # avec qq fichiers | ||
| + | h=$(basename $(pwd)); touch $h c2; echo $h > c2; | ||
| + | git add . | ||
| + | git commit -a -m "1er commit $h" | ||
| + | # ça nous a créé une branche master, mais on veut la nommer autrement pour pas confondre avec ceux des remote | ||
| + | # et éviter d′éventuel push/pull non désiré entre ce ce master local et les remote | ||
| + | git branch -m master commun | ||
| + | |||
| + | # un alias pour le serveur | ||
| + | git remote add remoteA ../serveurA master | ||
| + | |||
| + | # une branche que l′on va synchroniser avec le serveur | ||
| + | git fetch remoteA | ||
| + | git checkout --track -b brancheA remoteA/ | ||
| + | |||
| + | # on modifie un fichier | ||
| + | echo "mod 1" > cloneA | ||
| + | git commit -m "mod 1" cloneA | ||
| + | # que l′on veut envoyer | ||
| + | git push | ||
| + | #> | ||
| + | # Ah bon ? Le tracking marche pas ? | ||
| + | git push remoteA brancheA: | ||
| + | # ça push mieux | ||
| + | # 2e modif pour voir si ça track mieux maintenant qu′on lui a montré | ||
| + | echo "mod 2" >> cloneA | ||
| + | git commit -m "mod 2" cloneA | ||
| + | git push | ||
| + | # tj rien :-S, et avec -u ? | ||
| + | git push -u remoteA brancheA: | ||
| + | #> [...] | ||
| + | #> To ../ | ||
| + | #> 3b00bff..cb44c59 | ||
| + | #> Branch brancheA set up to track remote branch master from remoteA. | ||
| + | # ça parait pourtant clair, mais | ||
| + | echo "mod 3" >> cloneA | ||
| + | git commit -a -m "mod 3" | ||
| git push | git push | ||
| + | #> Everything up-to-date | ||
| + | # pas mieux... | ||
| </ | </ | ||
linux/memo_git.1245859536.txt.gz · Dernière modification : 24/06/2009 18:05 de daniel