2009-10-31 14 views
65

J'ai un dépôt git de mon projet avec environ 20 validations. Je sais comment cloner le commit réel avec git clone,comment cloner un ancien git-commit (et quelques autres questions sur git)

  • mais comment puis-je "cloner" un ancien commit?
  • est-il vraiment une bonne interface graphique (imho qgit n'est pas une bonne interface graphique)? Que sont exactement les "branches"?
  • quand je veux lancer 0.1, 0.2 et ainsi de suite, quelle est la meilleure façon de marquer ces commits dans git?
  • Quelles sont les grandes différences avec svn?

Répondre

112

Un référentiel git contient tout l'historique en tout temps.
Ainsi, lorsque vous le clonage d'un dépôt, vous le clonage avec toute son histoire, et puis, vous pouvez faire une branche de tout ce que vous commettez voulez:

$ git checkout -b aNewBranch SHA1 

avec SHA1 représentant le commettras id dont vous voulez continuer.


Branches dans Git sont juste une façon de garder une trace d'un chemin d'un DAG (Directed Acyclic Graph) qui est l'ensemble des commits représentant l'histoire d'un dépôt Git.
Il s'agit d'un simple pointeur que vous affectez à l'un de ces commits, et il continuera à avancer avec chaque nouveau commit.

branches

Voir Pro Git livre pour en savoir plus.


Vous pouvez marquer une validation spécifique avec a tag, qui, comme une branche, est un simple pointeur, mais un immuable (il ne sera pas déplacer lorsque vous faites nouveau commit).
Vous utiliserez de préférence annotées, qui sont stockées en tant qu'objets complets dans la base de données Git. Ils sont checksummed; contenir le nom du tagueur, l'adresse e-mail et la date; avoir un message d'étiquetage; et peut être signé et vérifié avec GNU Privacy Guard (GPG).


La section "Interfaces graphiques" de InterfacesFrontendsAndTools page sur Git Wiki répertorie les différents GUI pour Git au moment.


Vous verrez de nombreuses questions sur la différence entre Git et SVN: voir my answer (ou this one) par exemple.
Ma réponse la plus complète sur les différences fondamentales entre Git et SVN est ici:
"which of the two is better:git or SVN".

+1

En fait, la dernière question SO «laquelle des deux est la meilleure: git ou SVN» a été supprimée. Je l'ai copié à une réponse plus ancienne: http://stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128 – VonC

+4

pour fouiller temporairement dans un ancien commit sans faire de nouvelle branche: 'git checkout SHA1' et plus tard si vous décidez de le garder: 'git checkout -b aNewBranch' – rymo

4

Il y a quelques questions dans ce post, voici mon avis sur quelques réponses:

D'abord, « clone » commit précédent, vous pouvez faire quelque chose comme ceci:

git clone REPO_URL 
git checkout HEAD~1 // checks out the last commit's first parent 

Utilisation ~1 pour accéder au premier parent du dernier commit, et incrémenter le nombre pour obtenir le parent du parent et ainsi de suite. More on tilde and caret notation.

Les deux commandes ci-dessus vous placent dans un état HEAD détaché, qui peut être important ou non selon le contexte. Par exemple, ce n'est pas important si vous clonez dans le cadre de vos scripts de déploiement et que tout ce qui vous intéresse est l'accès à un commit précédent (par exemple, dans le cadre d'une stratégie de restauration).

Si vous avez besoin pour commencer à travailler à partir de ce moment de l'histoire, vous pouvez exécuter

git checkout -b NEW_BRANCH_NAME 

Une bonne interface graphique git? Pour moi SourceTree est le meilleur.

Que sont les branches? Dans mes propres mots, une branche est juste un moyen très facile de pivoter. Supposons que vous travaillez sur une branche, master et que vous souhaitiez essayer une expérience. Facile, juste git checkout -b experiment et vous êtes rapidement dans un endroit sûr pour casser des choses.

Qu'est-ce qui est différent entre git et svn?

git est un distribute version control system. svn ne l'est pas. En outre, le branchement (mentionné ci-dessus) est plus facile en git. Pour le balisage, je ne sais pas s'il y a "One True Way" (existe-t-il déjà?) Mais il suffit d'explorer la commande git tag. Une bonne chose à propos de git est combien il est facile de cloner une copie de votre repo sur votre ordinateur local (ou ailleurs) et faire ce que vous voulez et voir ce qui se passe. Si vous gâchez quelque chose, supprimez simplement le répertoire. Ainsi, vous pouvez expérimenter avec git tag dans un répertoire de test et voir ce que vous aimez.