Ok, después de ver esta publicación de PJ Hyett , he decidido saltar al final e ir con Git .
Entonces, lo que necesito es una guía práctica para principiantes de Git. "Principiante" se define como alguien que sabe cómo manejar su compilador, comprende hasta cierto punto qué es un Makefile y ha tocado el control de la fuente sin entenderlo muy bien.
"Práctico" se define como que esta persona no quiere entrar en detalles con respecto a lo que Git está haciendo en segundo plano, y ni siquiera le importa (o sabe) que se distribuye. Sus respuestas pueden insinuar las posibilidades, pero intente apuntar al principiante que quiera mantener un repositorio 'principal' en un 'servidor' que esté respaldado y sea seguro, y trate su repositorio local como simplemente un recurso 'cliente'.
Entonces:
Instalación / Configuración
- Cómo instalar Git
- ¿Cómo se configura Git? Intente cubrir Linux, Windows, Mac, piense en la mentalidad de 'cliente / servidor'.
- ¿Cómo se crea un nuevo proyecto / repositorio?
- ¿Cómo lo configura para ignorar los archivos (.obj, .user, etc.) que no son realmente parte de la base de código?
Trabajando con el código
- ¿Cómo se obtiene el último código?
- ¿Cómo verificas el código?
- ¿Cómo se comprometen los cambios?
- ¿Cómo ves lo que no está comprometido o el estado de tu base de código actual?
- ¿Cómo destruyes los commits no deseados?
- ¿Cómo compara dos revisiones de un archivo, o su archivo actual y una revisión anterior?
- ¿Cómo ve el historial de revisiones de un archivo?
- ¿Cómo maneja los archivos binarios (visio docs, por ejemplo, o entornos de compilación)?
- ¿Cómo se combinan los archivos cambiados al "mismo tiempo"?
- ¿Cómo deshace (revierte o restablece) una confirmación?
Etiquetado, ramificación, lanzamientos, líneas de base
- ¿Cómo 'marca' 'etiqueta' o 'libera' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraerlo más tarde?
- ¿Cómo se extrae un 'lanzamiento' en particular?
- ¿Cómo se ramifica?
- ¿Cómo se fusionan las ramas?
- ¿Cómo resuelve conflictos y completa la fusión?
- ¿Cómo se fusionan partes de una rama en otra rama?
- ¿Qué es rebase?
- ¿Cómo hago un seguimiento de las sucursales remotas?
- ¿Cómo puedo crear una rama en un repositorio remoto?
- ¿Cómo elimino una rama en un repositorio remoto?
- Ejemplos de flujo de trabajo de Git
Otro
- Describa y vincule a una buena GUI, complemento IDE, etc. que haga que Git sea un recurso de línea que no sea de comando, pero por favor enumere sus limitaciones y su calidad.
- msysgit : plataforma cruzada, incluida con Git
- gitk : visor de historial multiplataforma, incluido con Git
- gitnub : Mac OS X
- gitx - Visor de historial de Mac OS X
- smartgit : multiplataforma, comercial, beta
- tig - GUI de consola para Linux
- qgit - GUI para Windows, Linux
- Extensiones Git : paquete para Windows, incluye GUI amigable
- ¿Alguna otra tarea común que un principiante debería saber?
- ¿Cómo trabajo de manera efectiva con un repositorio de subversión configurado como mi fuente de control de origen?
Otras referencias para principiantes de Git
- Guia Git
- Libro git
- Git magic
- gitcasts
- Guías de GitHub
- Tutorial de Git
- Progit - libro de Scott Chacon
- Git - Curso intensivo SVN
- Git de abajo hacia arriba
- Listo
- gitref.org
- Hoja de trucos visual de Git
Profundizando en Git
Revisaré las entradas de vez en cuando y las "ordenaré" para que tengan una apariencia / sensación consistentes y sea fácil escanear la lista. plantilla de información adicional ". También vincularé a las entradas de la lista de viñetas anterior para que sea fácil encontrarlas más tarde.
fuente
rm -rf .git
borrar la base de datos de git.git status
para garantizar que se encuentre dentro de un repositorio: este tiene un problema: si tiene la variable de entorno $ GIT_DIR establecida en su shell actual, git ignorará su ubicación actual y usará el repositorio en $ GIT_DIR. Debería saber que ayer perdí una hora.GUI para git
Git GUI
Incluido con git: se ejecuta
git gui
desde la línea de comandos y el instalador msysgit de Windows lo agrega al menú Inicio.Git GUI puede hacer la mayoría de lo que necesitarías hacer con git. Incluyendo cambios de etapa, configurar git y repositorios, cambios de inserción, crear / pagar / eliminar ramas, fusionar y muchas otras cosas.
Una de mis características favoritas son los accesos directos "línea de escenario" y "trozo de escenario" en el menú contextual, que le permite confirmar partes específicas de un archivo. Puede lograr lo mismo a través de
git add -i
, pero me resulta más fácil de usar.No es la aplicación más bonita, pero funciona en casi todas las plataformas (se basa en Tcl / Tk)
Capturas de pantalla | un screencast
GitK
También incluido con git. Es un visor de historial de git y le permite visualizar el historial de un repositorio (incluidas las ramas, cuando se crean y se fusionan). Puede ver y buscar confirmaciones.
Va muy bien con git-gui.
Gitnub
Aplicación Mac OS X Principalmente un equivalente de
git log
, pero tiene cierta integración con github (como la "Vista de red").Se ve bonito y se adapta a Mac OS X. Puede buscar repositorios. El mayor critismo de Gitnub es que muestra la historia de forma lineal (una sola rama a la vez): no visualiza ramificaciones y fusiones, lo que puede ser importante con git, aunque esta es una mejora planificada.
Descargar enlaces, cambiar registro y capturas de pantalla | repositorio git
GitX
Pretende ser un "clon gitk para OS X".
Puede visualizar el historial de ramificaciones no lineales, realizar confirmaciones, ver y buscar confirmaciones, y tiene algunas otras características interesantes como poder "Quicklook" cualquier archivo en cualquier revisión (presione el espacio en la vista de lista de archivos), exportar cualquier archivo (a través de arrastrar y soltar).
Está mucho mejor integrado en OS X que
git-gui
/gitk
, y es rápido y estable incluso con repositorios excepcionalmente grandes.El repositorio git original de Pieter no ha actualizado recientemente (más de un año en el momento de la escritura). Una rama más mantenida de forma activa está disponible en brotherbard / gitx : agrega "barra lateral, captar, jalar, empujar, agregar control remoto, fusionar, selección de cereza, rebase, clonar, clonar a"
Descargar | Capturas de pantalla | repositorio git | horquilla de hermano | tenedor laullon
SmartGit
Desde la página de inicio:
Puedes descargarlo desde su sitio web .
Descargar
TortugaGit
Versión TortoiseSVN Git para usuarios de Windows.
Descargar
QGit
Descargar
gitg
Caracteristicas
Descargar: lanzamientos o fuente
Gitbox
Descargar
Gity
El sitio web de Gity no tiene mucha información, pero a partir de las capturas de pantalla allí parece ser una interfaz gráfica de usuario de código abierto OS X rica en funciones.
Descarga o fuente
Fusión
Descargas
Katana
Una GUI Git para OSX por Steve Dekorte.
Gratis por 1 repositorio, $ 25 por más.
Descargar
Sprout (anteriormente GitMac)
Se enfoca en hacer que Git sea fácil de usar. Cuenta con una interfaz de usuario nativa de Cocoa (tipo mac), exploración rápida de repositorios, clonación, push / pull, ramificación / fusión, diferencia visual, ramas remotas, fácil acceso a la Terminal y más.
Al hacer que las acciones de Git más utilizadas sean intuitivas y fáciles de realizar, Sprout (anteriormente GitMac) hace que Git sea fácil de usar. Compatible con la mayoría de los flujos de trabajo de Git, Sprout es ideal para diseñadores y desarrolladores, colaboración en equipo y usuarios avanzados y novatos por igual.
Descargar | Sitio web
Torre
Una GUI de Git rica en funciones para Mac OSX. Prueba gratuita de 30 días, $ 59USD para una licencia de usuario único.
Descargar | Sitio web
EGit
Descargar | Sitio web
Extensiones Git
Código abierto para Windows: instala todo lo que necesita para trabajar con Git en un solo paquete, fácil de usar.
Descargar
Muchas gracias a dbr por elaborar sobre las cosas de git gui.
SourceTree
SourceTree es un cliente gratuito de Mac para Git, Mercurial y SVN. Creado por Atlassian, la gente detrás de BitBucket, parece funcionar igualmente bien con cualquier sistema de VC, lo que le permite dominar una sola herramienta para usar con todos sus proyectos, sin embargo, están controlados por versión. Lleno de funciones y GRATIS.
Descargar | Sitio web
fuente
Bueno, a pesar del hecho de que solicitó que no "simplemente" vinculemos con otros recursos, es bastante tonto cuando ya existe un recurso comunitario (y creciente) que es realmente bastante bueno: el Libro de la Comunidad Git . En serio, estas más de 20 preguntas en una pregunta no serán concisas y consistentes. El Git Community Book está disponible como HTML y PDF y responde muchas de sus preguntas con respuestas claras, bien formateadas y revisadas por pares y en un formato que le permite saltar directamente a su problema en cuestión.
Por desgracia, si mi publicación realmente te molesta, la eliminaré. Solo dilo.
fuente
Cómo configurarlo para ignorar archivos:
La capacidad de hacer que git ignore los archivos que no desea que rastree es muy útil.
Para ignorar un archivo o conjunto de archivos, debe proporcionar un patrón. La sintaxis del patrón para git es bastante simple, pero poderosa. Es aplicable a los tres archivos diferentes que mencionaré a continuación.
Gran ejemplo de la página de manual de gitignore (5) :
En general, hay tres formas diferentes de ignorar los archivos no rastreados.
1) Ignorar para todos los usuarios del repositorio:
Agregue un archivo llamado .gitignore a la raíz de su copia de trabajo.
Edite .gitignore para que coincida con sus preferencias respecto de qué archivos deben / no deben ignorarse.
y comprometerse cuando haya terminado.
2) Ignore solo su copia del repositorio:
Agregar / editar el archivo $ GIT_DIR / info / exclude en su copia de trabajo, con sus patrones preferidos.
Ej: Mi copia de trabajo es ~ / src / project1, así que editaría ~ / src / project1 / .git / info / exclude
Ya terminaste!
3) Ignorar en todas las situaciones, en su sistema:
Los patrones globales de ignorar para su sistema pueden ir en un archivo llamado lo que desee.
El mío personalmente se llama ~ / .gitglobalignore
Entonces puedo informar a git de este archivo editando mi archivo ~ / .gitconfig con la siguiente línea:
Ya terminaste!
Creo que la página de manual de gitignore es el mejor recurso para obtener más información.
fuente
¿Cómo se 'etiqueta' un conjunto particular de revisiones?
¿Cómo 'marca' 'etiqueta' o 'libera' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraerlo más tarde?
Utilizando el
git tag
comando.Para simplemente "etiquetar" la revisión actual, simplemente debería ejecutar ...
Para enumerar las etiquetas actuales, simplemente ejecute
git tag
sin argumentos, o-l
(L minúscula):Para eliminar una etiqueta, utiliza el
-d
bandera:Para etiquetar una confirmación específica (anterior), simplemente haga ...
Por ejemplo:
Nota: por defecto, git crea una etiqueta "ligera" (básicamente una referencia a una revisión específica). La forma "correcta" es usar la
-a
bandera. Esto iniciará su editor pidiendo un mensaje de etiqueta (idéntico a pedir un mensaje de confirmación, también puede usar la-m
bandera para proporcionar el mensaje de etiqueta en la línea de comando). El uso de una etiqueta anotada crea un objeto con su propia ID, fecha, etiquetador (autor) y, opcionalmente, una firma GPG (usando la-s
etiqueta). Para más información sobre esto, vea esta publicaciónY para enumerar las etiquetas con anotaciones, use la
-n1
bandera para mostrar 1 línea de cada mensaje de etiqueta (-n245
para mostrar las primeras 245 líneas de cada anotación, y así sucesivamente):Para obtener más información, consulte la página de manual de git-tag (1)
fuente
git tag tagname revision_SHA1
Ejemplo de flujo de trabajo con GIT.
Git es extremadamente flexible y se adapta bien a cualquier flujo de trabajo, pero no imponer un flujo de trabajo en particular podría tener el efecto negativo de dificultar la comprensión de lo que puede hacer con git más allá del flujo de trabajo lineal de "respaldo", y cuán útil puede ser la ramificación, por ejemplo .
Esta publicación de blog explica muy bien un flujo de trabajo muy simple pero efectivo que es realmente fácil de configurar usando git.
citando de la publicación del blog: consideramos que origin / master es la rama principal donde el código fuente de HEAD siempre refleja un estado listo para producción:
El flujo de trabajo se ha vuelto lo suficientemente popular como para haber realizado un proyecto que implementa este flujo de trabajo: git-flow
Bonita ilustración de un flujo de trabajo simple, donde realiza todos sus cambios en el desarrollo y solo presiona para dominar cuando el código está en estado de producción:
Ahora supongamos que desea trabajar en una nueva función o en refactorizar un módulo. Podría crear una nueva rama, lo que podríamos llamar una rama "característica", algo que llevará algún tiempo y podría romper algún código. Una vez que su característica es "lo suficientemente estable" y quiere moverla "más cerca" de la producción, fusiona su rama de características para desarrollarla. Cuando todos los errores se resuelven después de la fusión y su código pasa todas las pruebas sólidas, empuja sus cambios a maestro.
Durante todo este proceso, encuentra un terrible error de seguridad, que debe corregirse de inmediato. Podría tener una rama llamada hotfixes, que realiza cambios que se empujan más rápidamente a la producción que la rama normal de "desarrollo".
Aquí tienes una ilustración de cómo podría verse esta función / revisión / desarrollo / flujo de trabajo de producción (bien explicado en la publicación del blog, y repito, la publicación del blog explica todo el proceso con mucho más detalle y mucho mejor que yo) .
fuente
Aquí hay una copia de la publicación de PJ Hyett, ya que ya no está disponible:
fuente
./foo
pero no hay una ruta especificada para el clon get, ¿a dónde va a ir?Cómo instalar Git
En Windows:
Instalar msysgit
Hay varias descargas:
Esto también instala un shell Cygwin bash, por lo que puede usarlo
git
en un shell más agradable (que cmd.exe), y también incluye git-gui (accesible mediantegit gui
comando, o elStart > All Programs > Git
menú)Mac OS X
Usa el instalador git-osx , o también puede instalar desde la fuente
A través de un administrador de paquetes
Instale
git
usando su administrador de paquetes nativo. Por ejemplo, en Debian (o Ubuntu):O en Mac OS X, a través de MacPorts :
... o fink:
... o Homebrew :
En distribuciones basadas en Red Hat, como Fedora:
En Cygwin, el paquete Git se puede encontrar en la sección "desarrollo"
Desde la fuente (Mac OS X / Linux / BSD / etc.)
En Mac OS X, si tiene instaladas las Herramientas para desarrolladores, puede compilar Git desde la fuente muy fácilmente. Descargue la última versión de Git como
.tar.bz
o.tar.gz
desde http://git-scm.com/ y extráigala (haga doble clic en Finder)En Linux / BSD / etc. Debería ser muy parecido. Por ejemplo, en Debian (y Ubuntu), debe instalar el
build-essential
paquete a través deapt
.Luego, en una Terminal,
cd
donde extrajo los archivos (la ejecucióncd ~/Downloads/git*/
debería funcionar), y luego ejecute ...Esto instalará Git en el lugar predeterminado (
/usr/local
- asígit
estará en/usr/local/bin/git
)Le pedirá que ingrese su contraseña (para
sudo
), esto es para que pueda escribir en el/usr/local/
directorio, al que solo puede acceder el usuario "root", por lo que se requiere sudo.Si desea instalarlo en un lugar separado (para que los archivos de Git no se mezclen con otras herramientas), use
--prefix
con el comando configure:Esto instalará el
git
binario en/usr/local/bin/gitpath/bin/git
- para que no tenga que escribir eso cada vez que lo haga, debe agregarlo$PATH
agregando la siguiente línea en su~/.profile
:Si no tiene acceso a sudo, puede usarlo
--prefix=/Users/myusername/bin
e instalarlo en su directorio personal. Recuerda agregar~/bin/
a$PATH
El script x-git-update-to-latest-version automatiza mucho de esto:
fuente
yum install git
. Para la ejecución de la GUIyum install git-gui
.sudo port install git-core+bash_completion+doc
fink self-update
debería ayudarGit Reset
Digamos que haces un tirón, lo combinas con tu código y decides que no te gusta. Use git-log, o tig, y encuentre el hash de donde quiera volver (probablemente su último commit antes del pull / merge) copie el hash, y haga:
En lugar del hash, puede usar HEAD ^ como acceso directo para el commit anterior.
fuente
git reset
debería desencadenar accidentalmentegit add
¿Cómo se configura un repositorio de equipo compartido?
Aquí se describe cómo configurar un repositorio normal , pero ¿cómo se configura un repositorio de equipo que todos puedan extraer y empujar desde y hacia?
Usar un sistema de archivos NFS compartido
Suponiendo que su equipo ya tiene, por ejemplo, una membresía de grupo compartida que se puede usar.
Para comenzar a usar este repositorio, lo más fácil es comenzar desde un repositorio local que ya haya estado usando:
Otros ahora pueden clonar esto y comenzar a trabajar:
Usando SSH
Configure una cuenta de usuario en el servidor de destino. Si usa una cuenta sin contraseña, una cuenta con contraseña o el uso
authorized_keys
realmente depende de su nivel de seguridad requerido. Eche un vistazo a Configuración de Git sobre SSH para obtener más información.Si todos los desarrolladores usan la misma cuenta para acceder a este repositorio compartido, no es necesario que use la
--shared
opción anterior.Después de iniciar el repositorio de la misma manera que antes, realiza el empuje inicial de esta manera:
¿Ves la similitud con lo anterior? Además, lo único que podría suceder es que SSH solicite una contraseña si la cuenta tiene una contraseña. Si recibe este mensaje en una cuenta sin contraseña, el servidor SSH probablemente se haya deshabilitado
PermitEmptyPasswords
.La clonación ahora se ve así:
fuente
git status
es tu amigo, úsalo con frecuencia. Bueno para responder preguntas como:A diferencia, por ejemplo
svn status
, segit status
ejecuta casi instantáneamente incluso en proyectos grandes. A menudo me resultaba tranquilizador mientras aprendía git a usarlo con frecuencia, para asegurarme de que mi modelo mental de lo que estaba sucediendo era preciso. Ahora lo uso principalmente para recordarme a mí mismo lo que he cambiado desde mi última confirmación.Obviamente, es mucho más útil si su .gitignore está configurado correctamente.
fuente
Cometer cambios
Una vez que haya editado un archivo, debe confirmar sus cambios en git. Cuando ejecute este comando, solicitará un mensaje de confirmación, que es solo un simple texto que le dice a todos lo que ha cambiado.
Confirmará el archivo main.c en el directorio ./source/
confirmará todos los archivos modificados (pero no los nuevos, deben agregarse al índice con git-add). Si desea confirmar solo ciertos archivos, primero deberá organizarlos con git-add y luego confirmar sin el indicador -a.
La confirmación solo cambia su repositorio local, aunque no los repositorios remotos. Si desea enviar las confirmaciones al repositorio remoto, deberá realizar una inserción.
Para alguien que viene de CVS o SVN, esto es un cambio, ya que la confirmación en el repositorio central ahora requiere dos pasos.
fuente
¿Cómo se ramifica?
La rama predeterminada en un repositorio git se llama
master
.Para crear una nueva sucursal use
Para ver una lista de todas las ramas en el tipo de repositorio actual
Si desea cambiar a otra sucursal, puede usar
Para crear una nueva rama y cambiar a ella en un solo paso
Para eliminar una rama, use
Para crear una rama con los cambios de la rama actual, haga
fuente
Obteniendo el último código
Eso cubre prácticamente todos los casos para obtener la última copia del código del repositorio remoto.
fuente
El libro gratuito Pro Git es definitivamente mi favorito, especialmente para principiantes.
fuente
Git Magic es todo lo que necesitarás. ¡Garantizada o le devolvemos su dinero!
fuente
¿Cómo se fusionan las ramas?
Si desea fusionar una rama (por ejemplo,
master
arelease
), asegúrese de que su rama actual sea la rama de destino en la que desea fusionar (usegit branch
ogit status
para ver su rama actual).Luego usa
(dónde
master
está el nombre de la rama que desea fusionar con la rama actual).Si hay algún conflicto, puede usar
para ver los conflictos pendientes tienes que resolverlos.
fuente
También he encontrado que Git Internals es muy útil. Está escrito por Scott Chacon (autor de Pro Git y mantenedor del Libro de la comunidad de Git). Lo que me gusta de Git Internals es que se enfoca primero en los conceptos y luego en los comandos , y dado que tiene ~ 100 páginas pequeñas, se puede digerir rápidamente.
fuente
¿Cómo ve el historial de revisiones de un archivo?
fuente
Cómo rastrear sucursales remotas
Suponiendo que hay un repositorio remoto desde el que clonó su repositorio local y también suponiendo que hay una rama llamada 'some_branch' en ese repositorio remoto, aquí le mostramos cómo rastrearlo localmente:
fuente
git remote show REMOTENAME
Un buen artículo para entender cómo funciona Git es The Git Parable . Muy recomendable!
fuente
¿Cómo compara dos revisiones de un archivo, o su archivo actual y una revisión anterior?
El comando de comparación es
git diff
.Para comparar 2 revisiones de un archivo:
Eso difiere commit1 contra commit2; si cambia el orden, los archivos se distribuyen al revés, lo que puede no ser lo que espera ...
Para comparar el archivo provisional actual con el repositorio:
Para comparar el archivo actual sin etapas con el repositorio:
fuente
¿Por qué otro cómo? Hay muy buenos en la red, como la guía git, que es perfecta para comenzar. Tiene buenos enlaces, incluido el libro git al que se puede contribuir (alojado en git hub) y que es perfecto para esta tarea colectiva.
En stackoverflow, ¡realmente preferiría ver tus trucos favoritos!
El mío, que descubrí recientemente, se
git stash
explica aquí , lo que le permite guardar su trabajo actual e ir a otra sucursalEDITAR: como la publicación anterior, si realmente prefiere el formato stackoverlow con publicaciones como wiki, eliminaré esta respuesta
fuente
IU de consola - Tig
Instalación:
Uso
Dentro de un repositorio de git, escriba 'tig', para ver un registro interactivo, presione 'enter' en cualquier registro para ver más información al respecto. h para obtener ayuda, que enumera la funcionalidad básica.
Trivialidades
"Tig" es "Git" al revés.
fuente
¿Cómo puedo crear una rama en un repositorio remoto?
Suponiendo que ha clonado su repositorio remoto desde algún repositorio remoto único.
fuente
git push origin name_of_branch
y la sucursal ya estará creada en tu control remotoname_of_branch
es el nombre local, el segundo es el nombre de la sucursal remota (deseada), por lo que podría serlocal_name_of_branch:remote_name_of_branch
si desea que los nombres difieran. Si desea que sean iguales, aún debe especificarlo de esta manera b / c git no supone que desea que el nombre sea el mismo a menos que lo indique (también hay otros métodos para hacerlo, sin embargo)Comencé con el tutorial oficial de Git . Creo que es lo suficientemente práctico para principiantes (¡era, y sigo siendo, un principiante, por su definición! Apenas entiendo los makefiles, solo he jugado un poco con Apache Subversion, etc.)
fuente
¿Cómo elimino una rama en un repositorio remoto?
Realice un empuje en su control remoto
:
antes del nombre de la sucursalser
origin
el nombre de su control remoto ymybranchname
el nombre de la sucursal que se va a eliminarhttp://help.github.com/remotes/
fuente
Empujar y tirar de cambios
De manera simplificada, solo haz
git push
ygit pull
. Los cambios se fusionan y, si hay un conflicto, git le informará y podrá resolverlo manualmente.Cuando ingresa por primera vez a un repositorio remoto, debe hacer un
git push origin master
(el maestro es la rama maestra). A partir de entonces, solo debes hacer elgit push
.Empuje etiquetas con
git push --tags
.fuente
Código de salida
Primero vaya a un directorio vacío, use "git init" para convertirlo en un repositorio, luego clone el repositorio remoto en el suyo.
De donde sea que clones inicialmente es de donde se extraerá "git pull" por defecto.
fuente
Gity: http://macendeavor.com/gity
fuente