Pregunta Git para principiantes: la guía práctica definitiva


Ok, después de ver este post de PJ Hyett, He decidido saltear hasta el final e ir con Git.

Entonces, lo que necesito es un principiante práctico guía a Git. "Principiante" se define como alguien que sabe cómo manejar su compilador, entiende hasta cierto punto Makefile es, y ha tocado el control de fuente sin entenderlo muy bien.

"Práctico" se define porque esta persona no quiere entrar en detalles con respecto a lo que hace Git en segundo plano, y ni siquiera le importa (o sabe) que se distribuye. Sus respuestas pueden insinuar las posibilidades, pero trate de apuntar al principiante que quiere mantener un repositorio 'principal' en un 'servidor' que esté respaldado y seguro, y trate su repositorio local como un recurso meramente 'cliente'.

Asi que:

Instalación / Configuración

Trabajando con el código

Etiquetado, ramificación, lanzamientos, líneas de base

Otro

  • Describa y vincule a una buena GUI, complemento IDE, etc. que haga de Git un recurso de línea no de comando, pero enumere sus limitaciones y sus ventajas.
    • msysgit - Plataforma cruzada, incluida con Git
    • gitk - Visor de historial de plataforma cruzada, incluido con Git
    • gitnub - Mac OS X
    • gitx - Visor de historial de Mac OS X
    • smartgit - Plataforma cruzada, comercial, beta
    • tig- consola GUI para Linux
    • qgit - GUI para Windows, Linux
    • Extensiones de Git - paquete para Windows, incluye GUI amigable
  • ¿Alguna otra tarea común que un principiante debe saber?
  • ¿Cómo trabajo efectivamente con un repositorio de subversión establecido como mi fuente de control de origen?

Otras referencias de Git para principiantes

Profundizando en Git

Revisaré las entradas de vez en cuando y las ordenaré para que tengan un aspecto y una apariencia coherentes, y es fácil escanear la lista. Siéntase libre de seguir un simple encabezado: breve explicación, lista de instrucciones, consejos y plantilla de información adicional. También vincularé las entradas de la lista de viñetas anterior para que sea fácil encontrarlas más adelante.


854
2017-11-26 09:26


origen


Respuestas:


¿Cómo se crea un nuevo proyecto / repositorio?

Un repositorio git es simplemente un directorio que contiene un especial .git directorio.

Esto es diferente de los sistemas de control de versiones "centralizados" (como la subversión), donde un "repositorio" está alojado en un servidor remoto, que usted checkout en un directorio de "copia de trabajo". Con git, tu copia de trabajo es el repositorio.

Simplemente ejecuta git init en el directorio que contiene los archivos que desea rastrear.

Por ejemplo,

cd ~/code/project001/
git init

Esto crea un .git (oculto) carpeta en el directorio actual.

Para hacer un nuevo proyecto, ejecuta git init con un argumento adicional (el nombre del directorio que se creará):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

Para verificar si la ruta actual está dentro de un repositorio git, simplemente ejecute git status - si no es un repositorio, informará "fatal: no es un repositorio git"

También puede listar el .git directorio y compruebe que contiene archivos / directorios similares a los siguientes:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

Si por algún motivo desea "desgotar" un repositorio (desea dejar de usar git para seguir ese proyecto). Simplemente elimina el .git directorio en el nivel base del repositorio.

cd ~/code/project001/
rm -rf .git/

Precaución: Esto destruirá todas revisión histórica, todas tus etiquetas, todo git lo ha hecho. No tocará los archivos "actuales" (los archivos que puede ver actualmente), ¡pero los cambios previos, los archivos eliminados, etc., serán irrecuperables!


118
2017-11-25 00:49



GUI para git


Git GUI

Incluido con git - Ejecutar git gui desde la línea de comando y Windows msysgit instalador lo agrega al menú Inicio.

La GUI de Git puede hacer la mayoría de lo que necesitarías hacer con git. Incluyendo cambios de escenario, configuración de git y repositorios, cambios de inserción, creación / salida / eliminación de sucursales, combinación y muchas otras cosas.

Una de mis características favoritas son los accesos directos "stage line" y "stage hunk" en el menú contextual, que le permite asignar partes específicas de un archivo. Puedes lograr la misma via 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 (basándose 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 sucursales, cuando se crean y se fusionan). Puede ver y buscar commits.

Se combina 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 ajusta con Mac OS X. Puede buscar repositorios. La mayor crítica de Gitnub es que muestra la historia de forma lineal (una sola rama a la vez) - no visualiza la bifurcación y la fusión, lo que puede ser importante con git, aunque esta es una mejora planificada.

Descargar enlaces, cambiar registro y capturas de pantalla | repositorio de git


GitX

Tiene la intención de ser un "clon de gitk para OS X".

Puede visualizar el historial de ramificación no lineal, realizar confirmaciones de compromisos, ver y buscar, y tiene otras características interesantes como la posibilidad de "actualizar rápidamente" cualquier archivo en cualquier revisión (presionar 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 original de git Pieter no se ha actualizado recientemente (más de un año al momento de escribir). Una rama mantenida más activamente está disponible en brotherbard / gitx - Agrega "sidebar, fetch, pull, push, add remote, merge, cherry-pick, rebase, clone, clone to"

Descargar | Capturas de pantalla | repositorio de git | tenedor brotherbard | horquilla laullon


SmartGit

Desde la página de inicio:

SmartGit es un front-end para el   sistema de control de versiones distribuidas Git   y se ejecuta en Windows, Mac OS X y   Linux. SmartGit es para   desarrolladores que prefieren un usuario gráfico   interfaz sobre un cliente de línea de comando,   ser aún más productivo con Git -   el DVCS más poderoso hoy.

Puedes descargarlo de su página web.

Descargar


TortoiseGit

Versión TortoiseSVN Git para usuarios de Windows.

Es portar TortoiseSVN a TortoiseGit. La última versión 1.2.1.0. Esta versión puede completar tareas normales, tales como commit, show log, diff two version, create branch y tag, Create patch, etc. Ver Notas de lanzamiento para el detalle. Bienvenido a contribuir con este proyecto.

Descargar


QGit

QGit es un visor de GUI git construido en   Qt / C ++.

Con qgit podrás navegar   historial de revisiones, ver el contenido del parche   y cambio de archivos, gráficamente   siguiendo diferente desarrollo   ramas

Descargar


gitg

gitg es un visor de repositorio git   apuntando a gtk + / GNOME. Uno de sus principales   objetivos es proporcionar un mayor   experiencia de usuario unificada para git   interfaces en varios escritorios. Eso   ¿Esto no es escribir un   aplicación multiplataforma, pero por   estrecha colaboración con similares   clientes para otros sistemas operativos   (como GitX para OS X).

Caracteristicas

  • Examinar el historial de revisión.
  • Maneje repositorios grandes (carga el repositorio de Linux, más de 17000 revisiones, menos de 1 segundo).
  • Cometer cambios.
  • Etapa / fuera de escena trozos individuales.
  • Revertir cambios.
  • Mostrar la diferencia coloreada de los cambios en las revisiones.
  • Buscar árbol para una revisión dada.
  • Exportar partes del árbol de una revisión dada.
  • Proporcione cualquier refspec que un comando como 'git log' pueda entender para construir el historial.
  • Mostrar y cambiar entre las ramas en la vista de historial.

Descargar: lanzamientos o fuente


Gitbox

Gitbox es un gráfico de Mac OS X   interfaz para control de versiones Git   sistema. En una sola ventana ves   ramas, historia y trabajo   estado del directorio

Las operaciones diarias son fáciles: etapa   y cambiar los cambios con una casilla de verificación.   Comprometerse, tirar, fusionar y empujar con un   un solo click. Haga doble clic en un cambio para   muestra una diferencia con FileMerge.app.

Descargar


Gity

El sitio web de Gity no tiene mucha información, pero a partir de las capturas de pantalla de allí aparece una característica de código abierto OS X git gui.

Descargar o fuente


Meld

Meld es una herramienta visual diff y merge.   Puedes comparar dos o tres archivos y   editarlos en su lugar (actualización diffs   dinamicamente). Puedes comparar dos o   tres carpetas y archivo de inicio   comparaciones Puede navegar y ver una   copia de trabajo de la versión popular   sistemas de control tales como CVS,   Subversion, Bazaar-ng y Mercurial   [y Git]

Descargas


Katana

Una GUI de Git para OSX de Steve Dekorte.

A simple vista, vea qué ramas remotas   tener cambios para tirar y repos locales   tener cambios para empujar. Los git ops de   agregar, confirmar, pulsar, tirar, etiquetar y restablecer   son compatibles, así como diffs visuales   y navegación visual de la hieracia del proyecto   que destaca los cambios y adiciones locales.

Gratis para 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 (mac-like), navegación rápida de repositorio, clonación, push / pull, bifurcación / fusión, diff visual, sucursales remotas, fácil acceso a la Terminal, y más.

Al hacer que las acciones de Git más comunes 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 características para Mac OSX. Prueba gratuita de 30 días, $ 59USD para una licencia de usuario único.

Descargar | Sitio web


EGit

EGit es un proveedor de Eclipse Team para el sistema de control de versiones de Git.   Git es un SCM distribuido, lo que significa que cada desarrollador tiene una copia completa   de toda la historia de cada revisión del código, haciendo consultas en contra   la historia es muy rápida y versátil.

El proyecto EGit está implementando herramientas Eclipse en la parte superior del JGit   Implementación de Java de Git.

Descargar | Sitio web


Extensiones de Git

Código abierto para Windows: instala todo lo que necesita para trabajar con Git en un solo paquete, fácil de usar.

Git Extensions es un conjunto de herramientas para hacer que trabajar con Git en Windows sea más intuitivo. La extensión de shell se integrará en Windows Explorer y presenta un menú contextual en archivos y directorios. También hay un complemento de Visual Studio para usar git de Visual Studio.

Descargar

Muchas gracias a dbr para elaborar sobre las cosas de git gui.


SourceTree

SourceTree es un gratis Cliente Mac para Git, Mercurial y SVN. Construido por Atlassian, la gente detrás de BitBucket, parece funcionar igual de bien con cualquier sistema de VC, que le permite dominar una sola herramienta para usar con todos sus proyectos, sin embargo están controlados por la versión. Lleno de funciones, y GRATIS.

Expert-Ready y lleno de características para usuarios novatos y avanzados:

Revise los conjuntos de cambios entrantes y salientes.   Cherry-pick entre ramas.   Manejo de parches, rebase, stash / shelve y mucho más.

Descargar | Sitio web 



110
2017-11-25 01:04



Bueno, a pesar del hecho de que usted pidió que no "simplemente" vinculemos a otros recursos, es bastante absurdo cuando ya existe un recurso (y creciente) comunitario que es realmente bastante bueno: el Libro de comunidad de Git. En serio, estas más de 20 preguntas en una pregunta van a ser cualquier cosa menos concisas y consistentes. El Libro comunitario de Git está disponible tanto en HTML como en PDF y responde muchas de sus preguntas con respuestas claras, bien formateadas y revisadas por pares y en un formato que le permite ir directamente a su problema.

Por desgracia, si mi publicación realmente te molesta, la eliminaré. Solo dilo.


59
2017-11-27 04:58



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, proporcione 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.

  • Una línea en blanco no ignora ningún archivo, generalmente se usa como separador.
  • Líneas mirando con # servir como comentarios.
  • los ! el prefijo es opcional y anulará el patrón. Cualquier patrón negado que coincida anulará los patrones de precedencia más baja.
  • Admite expresiones avanzadas y comodines
    • Ej .: el patrón: *. [oa]  ignorará todos los archivos en el repositorio que termina en .o o .a (archivos de objeto y archivo)
  • Si un patrón tiene un directorio que termina con una barra inclinada, git solo coincidirá con este directorio y las rutas debajo de él. Esto excluye archivos regulares y enlaces simbólicos del partido.
  • Una barra diagonal inicial coincidirá con todos los archivos en ese nombre de ruta.
    • Ej .: el patrón /*.do coincidirá con el archivo foo.c pero no bar / awesome.c

Gran ejemplo de la gitignore (5) página de hombre:

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

En general, hay tres formas diferentes de ignorar los archivos sin seguimiento.

1) Ignorar para todos los usuarios del repositorio:

Agrega un archivo llamado .gitignore a la raíz de tu copia de trabajo.

Editar .gitignore para que coincida con sus preferencias para qué archivos deben / no deben ignorarse.

git add .gitignore 

y cometer cuando haya terminado.

2) Ignora solo tu copia del repositorio:

Agregar / editar el archivo $ GIT_DIR / info / exclude en tu copia de trabajo, con tus patrones preferidos.

Ejemplo: mi copia de trabajo es ~ / src / project1, así que editaría ~ / src / project1 / .git / info / exclude

¡Terminaste!

3) Ignorar en todas las situaciones, en su sistema: 

Los patrones de ignorar global para su sistema pueden ir en un archivo con el nombre que desee.

El mío personalmente se llama ~ / .gitglobalignore 

Puedo dejar que git sepa de este archivo editando mi ~ / .gitconfig archivo con la siguiente línea:

core.excludesfile = ~/.gitglobalignore

¡Terminaste!

Encuentro el gitignore la página de manual es el mejor recurso para obtener más información.


56
2017-11-27 13:25



¿Cómo 'etiqueta' un conjunto particular de revisiones

¿Cómo 'marcan' 'etiqueta' o 'liberan' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda obtener uno más tarde?

Utilizando el git tag mando.

Para simplemente "etiquetar" la revisión actual, simplemente ejecutaría ...

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

Para enumerar las etiquetas actuales, simplemente ejecuta git tag sin argumentos, o -l (minúscula L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

Para eliminar una etiqueta, usa el -d bandera:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

Para etiquetar un compromiso específico (previo), simplemente lo haces ...

git tag [tag name] [revision SHA1 hash]

Por ejemplo:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Nota: de forma predeterminada, git crea una etiqueta "liviana" (básicamente una referencia a una revisión específica). La forma "correcta" es usar el -a bandera. Esto lanzará su editor pidiendo un mensaje de etiqueta (idéntico a pedir un mensaje de confirmación, también puede usar el -m bandera para suministrar el mensaje de etiqueta en la línea de comando). El uso de una etiqueta anotada crea un objeto con su propio ID, fecha, etiquetador (autor) y, opcionalmente, una firma GPG (utilizando el -s etiqueta). Para más información sobre esto, ver esta publicación

git tag mytagwithmsg -a -m 'This is a tag, with message'

Y 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):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

Para más información, vea el git-tag (1) Página manual


47
2017-11-27 14:25



Ejemplo de flujo de trabajo con GIT.

Git es extremadamente flexible y se adapta bien a cualquier flujo de trabajo, pero no aplicar un flujo de trabajo particular puede tener el efecto negativo de dificultar la comprensión de lo que se puede hacer con git más allá del flujo de trabajo lineal de "respaldo" y qué tan útil puede ser la ramificación, por ejemplo .

Esta entrada en el 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, en el que realiza todos los cambios en el desarrollo, y solo empuja para dominar cuando el código está en un estado de producción:

simple workflow

Ahora digamos que desea trabajar en una nueva característica o en refactorizar un módulo. Podrías crear una nueva rama, lo que podríamos llamar una rama de "característica", algo que tomará algo de tiempo y podría romper algún código. Una vez que su función es "lo suficientemente estable" y desea moverla "más cerca" de la producción, fusiona su rama de características en desarrollo. Cuando todos los errores se resuelven después de la fusión y el código pasa todas las pruebas sólidas, usted impulsa sus cambios en el maestro.

Durante todo este proceso, encontrará un terrible error de seguridad, que debe ser resuelto de inmediato. Podría tener una bifurcación llamada hotfixes, que realice cambios que se vuelvan a producir más rápidamente que la rama de "desarrollo" normal.

Aquí tienes una ilustración de cómo se vería este flujo de trabajo de función / revisión / desarrollo / 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) .

Git workflow example


46
2017-11-26 01:20



Aquí hay una copia de la publicación de PJ Hyett, ya que ya no está disponible:

Git no es difícil

23 de noviembre de 2008

Cuando le decimos a la gente por qué deberían   usa Git sobre Subversion, el ir a   línea es, "Git hace mejor a Subversion   que Subversion, pero hace mucho   más que eso."

El "mucho más" se compone de un montón   de cosas que hacen que Git realmente brille   pero puede ser bastante abrumador   los que vienen de otros SCM como   Subversión.

Dicho eso, no hay nada que se detenga   de usar Git como usas   Subversión mientras haces el   transición.

Asumiendo que has instalado el   software necesario y tener un control remoto   repositorio en alguna parte, esta es la forma en que   agarraría el código y empujaría su   vuelve a cambiar con Subversion:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

Y cómo lo harías en Git:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

Un comando más para que ocurra en   Git. Ese comando extra tiene grandes   implicaciones, pero a los efectos de   esta publicación, eso es todo lo que estamos hablando   sobre, un comando extra.

Ver, realmente no es tan difícil.

Actualizar: Sería negligente no mencionar que el equivalente de   actualizar su copia local en Subversion   en comparación con Git es svn update y    git pull, respectivamente. Solo uno   comando en ambos casos.


39
2018-05-03 08:56



Cómo instalar Git

En Windows:

Instalar msysgit

Hay varias descargas:

  • Git: Úselo a menos que necesite específicamente una de las otras opciones a continuación.
  • PortableGit: Úselo si quiere ejecutar Git en una PC sin instalarlo en esa PC (por ejemplo, ejecutando Git desde una unidad USB)
  • msysGit: Úselo si quiere desarrollar Git en sí mismo. Si solo quieres usar Git para tu código fuente, pero no desea editar Git código fuente, no necesita esto.

Esto también instala un shell bash Cygwin, para que pueda usar el git en un shell más bonito (que cmd.exe), y también incluye git-gui (accesible a través de git guicomando, o el Start > All Programs > Git menú)

Mac OS X

Utilizar el git-osx-installer, o también puedes instalar desde la fuente

A través de un administrador de paquetes

Instalar git usando tu administrador de paquetes nativo Por ejemplo, en Debian (o Ubuntu):

apt-get install git-core

O en Mac OS X, a través de MacPorts:

sudo port install git-core+bash_completion+doc

... o fink:

fink install git

…o Homebrew:

brew install git

En distribuciones basadas en Red Hat, como Fedora:

yum install git

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 las herramientas de desarrollo instaladas, puede compilar Git desde la fuente con mucha facilidad. Descargue la última versión de Git como un .tar.bz o .tar.gz de http://git-scm.com/y extraerlo (haga doble clic en Finder)

En Linux / BSD / etc. debería ser más o menos lo mismo. Por ejemplo, en Debian (y Ubuntu), necesita instalar el build-essential paquete a través de apt.

Luego en una Terminal, cd a donde extrajo los archivos (Ejecutando cd ~/Downloads/git*/ debería funcionar), y luego ejecutar ..

./configure && make && sudo make install

Esto instalará Git en el lugar predeterminado (/usr/local - asi que git Estará en /usr/local/bin/git)

Le pedirá que ingrese su contraseña (para sudo), esto es para que pueda escribir en /usr/local/ directorio, que solo puede ser accedido por el usuario "raíz" por lo que se requiere sudo!

Si lo hace para instalarlo en algún lugar separado (para que los archivos de Git no se mezclen con otras herramientas), use --prefix con el comando de configuración:

./configure --prefix=/usr/local/gitpath
make
sudo make install

Esto instalará el git binario en /usr/local/bin/gitpath/bin/git - por lo que no tiene que escribir eso cada vez que usted, debe agregar a su $PATH agregando la siguiente línea en su ~/.profile:

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

Si no tiene acceso sudo, puede usar --prefix=/Users/myusername/bin e instala en tu directorio de inicio. Recuerde agregar ~/bin/ a $PATH

La secuencia de comandos x-git-update-to-latest-version automatiza mucho de esto:

Este script actualiza mi clon local del repositorio git (localmente en ~/work/track/git), y luego configura, instala (en /usr/local/git-git describe) y actualiza el /usr/local/git enlace simbólico

De esta manera, puedo tener /usr/local/git/bin en mi PATH y siempre estoy usando la última versión.

La última versión de este script también instala las páginas man. Tienes que ajustar tu MANPATH para incluir el /usr/local/git/share/man directorio.


33
2017-08-29 01:33