2010-07-07 3 views
3

J'ai lu et essayé Git ces derniers jours et j'ai encore une chose sur laquelle je n'arrive pas à trouver de bonnes informations. J'ai lu qu'avec Git, il est courant de configurer un clone de référentiel public et privé sur la machine de chaque développeur de telle sorte que le développeur puisse effectuer des validations privées autant de fois qu'il le souhaite et ensuite ne pousser que vers le référentiel public ils sont satisfaits des changements.Utiliser git correctement

Je voudrais savoir deux choses:.

1 Comment mettre en place un système tel que ci-dessus (en utilisant une approche de type centralisé (référentiel créé avec --bare)

2 -Je veux pouvoir faire autant de validations dans mon dépôt privé que je le veux avec n'importe quel message de commit et ne pas avoir ces messages (ou révisions) apparaître quand j'appuie mes modifications sur le dépôt public ou le référentiel nu). C'est à dire. Je veux que mes modifications publiques soient engagées sous forme de somme forfaitaire avec un seul message.

Merci!

Répondre

1

Il y a quelques façons de mettre en place un Git serveur « central », comme décrit dans le FAQ, principalement via git-daemon, via HTTP ou via un serveur SSH existant (si c'est sur une machine Linux, vous pouvez partager un référentiel en définissant des groupes Unix de manière appropriée et en donnant des permissions de groupe). Vous pouvez également utiliser des services existants tels que GitHub.

Si vous souhaitez insérer un nombre de validations locales en tant que validation unique, vous pouvez "écraser" ces validations, avec git merge ou git rebase -i (interactif). Je trouve cela plus facile à faire avec git rebase -i. Vous devez donner un hash ou un identifiant pour une validation précédente (à partir de laquelle vous pouvez vouloir fusionner) en tant qu'argument. Ensuite, vous aurez un éditeur avec quelque chose comme ceci:

pick 0000001 Fixed big bug 1 
pick a000002 Fixed big bug 2 
pick dae3124 Fixed big bug 3 
pick 3554abc Fixed big bug 4 

# Rebase 5cea2cd..8963229 onto 5cea2cd 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

Vous pouvez ensuite modifier ce fichier pour avoir quelque chose comme ceci:

pick 0000001 Fixed big bug 1 
squash a000002 Fixed big bug 2 
squash dae3124 Fixed big bug 3 
pick 3554abc Fixed big bug 4 

Une fois que vous enregistrez le fichier, Git vous offrir modifiez les messages de journal des validations que vous écrasez en un seul message. Effectivement, vous aurez fusionné 0000001, a000002 et dae3124 en "Correction de gros bugs 1, 2 et 3." par exemple. (Vous pouvez utiliser fixup aussi.) Vous n'êtes pas connecté sera alors:

0014234 Fixed big bugs 1, 2 and 3. 
3554abc Fixed big bug 4 

(Bien sûr, le hachage de résultat de l'engagement fusionné ne ressemble en rien les hash des commits il vient.)

Une fois que vous l'avez fait localement, vous pouvez pousser cette branche vers le dépôt public distant.

2

git rebase est votre ami

Cette réponse à la question, what-are-your-favorite-git-features-or-tricks parle sur votre situation

+0

C'est exactement ce que je avais besoin mais j'ai une autre question, dans l'exemple, il utilise git rebase TETE -i ~ 3 je peux faire git rebase -i pour éviter d'avoir à se rappeler combien commits j'ai fait à quels fichiers pour le dernier ensemble de changements, où la balise est une étiquette de l'arbre de source avant que j'ai commencé à faire des commits. – Coder

+0

@Coder: Oui, la plupart des commandes git acceptent de nombreux types d'identifiants, tels que SHA1 commit ids, tags, identifiants relatifs (comme 'HEAD ~ 3'), dates, etc. Voir [Git Treeishes] (http: // book .git-scm.com/4_git_treeishes.html) pour l'ensemble complet. –

+0

http://book.git-scm.com/4_rebasing.html ceci est tiré du livre git officiel. Je ne suis pas sûr de la réponse exacte à votre question, mais vous devez configurer un référentiel fictif et le tester jusqu'à ce qu'il fonctionne correctement. –

Questions connexes