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