2009-10-31 25 views
65

Tengo un git-repositorio de mi proyecto con aproximadamente 20 commits. Sé cómo clonar la confirmación real con git clone,cómo clonar un antiguo git-commit (y algunas preguntas más sobre git)

  • pero ¿cómo puedo "clonar" una confirmación anterior?
  • ¿hay una git-GUI realmente buena (imho qgit no es una buena GUI)?
  • ¿qué son exactamente las "sucursales"?
  • cuando quiero liberar 0.1, 0.2 y así sucesivamente, ¿cuál es la mejor manera de marcar estos commits en git?
  • ¿Cuáles son las grandes diferencias con svn?

Respuesta

112

Un repositorio git contiene el toda la historia en todo momento.
Así que cuando vaya a clonar un repositorio, vaya a clonar con toda su historia, y continuación, se puede hacer una rama de cualquier comprometerse desea:

$ git checkout -b aNewBranch SHA1 

con SHA1 que representa el ID de confirmación desde el cual quieres continuar


Ramificaciones en Git son sólo una forma de hacer un seguimiento de una trayectoria de un DAG (Directed Acyclic Graph) que es el conjunto de confirmaciones que representan la historia de un repositorio Git.
Es un mero puntero que asigna a uno de esos commits, y seguirá moviéndose junto con cada commit nuevo.

branches

Ver Pro Git libro por más.


Puede marcar una específica se comprometen con a tag, que, al igual que una rama, es un mero indicador, sino una inmutable (que no se moverán cuando haces nueva cometer).
Utilizará preferiblemente etiquetas anotadas, que se almacenan como objetos completos en la base de datos de Git. Son sumarios; contener el nombre, el correo electrónico y la fecha del etiquetador; tener un mensaje de etiquetado; y puede ser firmado y verificado con GNU Privacy Guard (GPG).


La sección "Interfaces Gráficas" de InterfacesFrontendsAndTools página en Git Wiki Lista los diferentes GUI para Git en el momento.


Verá muchas preguntas acerca de la diferencia entre Git y SVN: my answer ver (o this one) por ejemplo.
Mi respuesta más completa sobre las diferencias fundamentales entre Git y SVN está aquí:
"which of the two is better:git or SVN".

+1

En realidad, la última pregunta SO "cuál de los dos es mejor: git o SVN" se ha eliminado. Lo he copiado en una respuesta anterior: http://stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128 – VonC

+4

para hurgar temporalmente en una confirmación antigua sin crear una nueva rama: 'git checkout SHA1' , y luego si decides mantenerlo: 'git checkout -b aNewBranch' – rymo

4

Hay algunas preguntas en este post, aquí es mi opinión sobre algunas respuestas:

En primer lugar, "clonar" la confirmación anterior, se puede hacer algo como esto:

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

Uso ~1 para acceder al primer padre del último compromiso, e incrementar el número para obtener el padre del padre, y así sucesivamente. More on tilde and caret notation.

Los dos comandos anteriores lo colocarán en un estado HEAD separado, que puede o no ser importante según el contexto. Por ejemplo, no es importante si está clonando como parte de sus scripts de implementación y lo único que le importa es acceder a una confirmación previa (por ejemplo, como parte de una estrategia de reversión).

Si usted necesita para empezar a trabajar desde este punto de la historia, puede ejecutar

git checkout -b NEW_BRANCH_NAME 

Una buena interfaz gráfica de usuario git? Para mí SourceTree es el mejor.

¿Qué son las sucursales? En mis propias palabras, una rama es solo una manera muy fácil de pivotar. Digamos que está trabajando en una rama, master y quiere probar un experimento. Fácil, solo git checkout -b experiment y estás rápidamente en un lugar seguro para romper cosas.

¿Qué hay de diferente entre git y svn?

git es un distribute version control system. svn no es. Además, la ramificación (mencionada anteriormente) es más fácil en git.

Para etiquetar, no sé si existe "One True Way" (¿hay alguna vez?) Pero simplemente explore el comando git tag. Una gran cosa acerca de git es lo fácil que es clonar un duplicado de su repositorio en su computadora local (o donde sea) y hacer lo que quiera y ver qué sucede. Si estropea algo, simplemente elimine el directorio. Entonces, puedes experimentar con git tag en algún directorio de prueba y ver qué te gusta.

Cuestiones relacionadas