Ya estás usando el control de código fuente para administrar tu código, ¿verdad? Incluso podría estar usando su SCM como la pieza central de su flujo de trabajo, como lo hacemos en New Relic.
En este artículo, no vamos a revisar los conceptos básicos de la gestión de control de origen, independientemente de cuál utilice. Supongamos que ya sabes cómo moverte. Lo que vamos a cubrir es cómo los profesionales usan git. Vamos a echar un vistazo a algunas de las funciones avanzadas y flujos de trabajo con los que quizás aún no esté familiarizado. Con suerte, saldrá con la boca abierta ante las posibilidades que ofrece Git.!
Si eres como yo, te encanta explorar cómo trabajan otros desarrolladores..
Para los no iniciados, o aquellos que vienen de otro SCM, Git es un sistema de control de versiones distribuido. Es gratuito y de código abierto, tiene una huella muy pequeña y puede encajar dentro del flujo de trabajo que más le convenga. En general, no lo obliga a trabajar de una manera particular, lo que significa que hay muchas metodologías diferentes sobre cómo usar sus características, como áreas de preparación, lanzamientos de bifurcación y etiquetado. Si eres como yo, te encanta explorar cómo funcionan otros desarrolladores. Así que prepárate para comenzar a modificar tu .gitconfig
, porque estás en un capricho Veamos como los profesionales usan git..
Es probable que esté familiarizado con la modificación accidental de un solo archivo por dos razones diferentes sin comprometerse entre.
Ciertamente, usted está familiarizado con agregar archivos al área de preparación con el nombre apropiado añadir
mando. Y es probable que esté familiarizado con la modificación accidental de un solo archivo por dos razones diferentes sin comprometerse entre ellos. Así que seguro tendrás una registro de git
Lleno de mensajes como "Editar X y cambiar Y no relacionado". Si esto suena como su flujo de trabajo, entonces la adición interactiva es su nuevo mejor amigo.
La adición interactiva, o la adición de un parche, lo guía a través de sus cambios, un trozo a la vez. Cuando agrega un archivo con el -pag
comando, se le solicitará cada cambio lógico (es decir, las líneas editadas sucesivamente se agruparán). Hay una serie de elecciones que puedes hacer en cada trozo, desde dividir el trozo actual en trozos más pequeños, saltear un trozo o incluso editarlo manualmente. Utilizar el ?
Opción para ver una lista completa de comandos..
Comenzar con stks en escena es tan simple como:
git añadir -p
Como buen ciudadano de codificación, cuando se encuentra con algo que necesita una solución rápida o una limpieza, probablemente debería tomarse un momento para cambiarlo. Pero si está utilizando un flujo de trabajo pesado de rama de entidad, entonces no desea esa corrección no relacionada en su rama de entidad. Esto significa que necesitarás alijo
sus cambios actuales, cambie a su rama maestra y luego haga la corrección allí. Rebotar entre las ramas puede ser tedioso, pero, afortunadamente, hay un atajo rápido para cambiar a la última rama. (a través de Zach Holman)
git checkout -
Esta sintaxis debe ser bastante familiar para los usuarios de * NIX. los discos compactos
comando tiene un atajo similar (discos compactos -
) que saltará al último directorio en el que estaba. Nunca tendrá que recordar cómo llamó a esa rama de características cuando necesita volver a cambiar; sólo git checkout -
.
Cuando trabaje con ramas de características, puede crear rápidamente tantos que abarroten la salida de rama de git - lista
. De vez en cuando quieres deshacerte de las ramas que lo han convertido en maestro. Pero probablemente tengas una pausa rápida antes de rama git -d
, pero con los siguientes comandos puede eliminarlos con confianza sin pensarlo dos veces. (a través de Zach Holman)
Si desea ver qué sucursales locales tiene fusionadas en la sucursal en la que se encuentra actualmente, todo lo que necesita es:
rama de git - fusionada
El reverso también está disponible. Muestra qué ramas no se han fusionado en la rama seleccionada actualmente con:
rama de git - no-fusionada
Combine esto con un par de herramientas sencillas de UNIX y puede eliminar rápidamente todo lo que ya se ha fusionado:
rama de git - fusionada | rama de git de xargs -d
Digamos que está experimentando con algunas refactorizaciones y tiene algunas ramas que han realizado varios cambios. Si tiene cambios en un archivo en una rama distante que desea incorporar a su rama de trabajo actual, puede realizar cualquier número de pasos. Sin la siguiente sugerencia, es probable que guarde sus cambios actuales, cambie de ramas y capture el contenido del archivo que desea cambiar, cambie de nuevo (con git checkout -
por supuesto) y hacer sus ediciones. O simplemente puede retirar ese archivo que lo combinará con su rama actual (a través de Zach Holman):
git checkout-- ruta / a / archivo.rb
Así que tienes la lista de ramas abarrotada de la que hablamos antes; algunos de los que has limpiado con el --fusionado
bandera. Pero ¿qué pasa con todas esas otras ramas? ¿Cómo sabes cuáles son útiles o están totalmente desactualizadas? los para cada ref
El comando generará una lista para cada rama y mostrará la información de referencia para el último compromiso. Podemos personalizar la salida para incluir información útil, pero, lo que es más importante, podemos ordenar la lista por fecha. Este comando nos dará una lista de sucursales con el último mensaje de confirmación y el interlocutor, ordenados por orden de fecha descendente. (a través de Rein Henrichs)
git for-each-ref --sort = -committerdate --format = '% (committerdate: short)% (refname: short) [% (committername)]'
Si bien puedes escribir este comando cada vez, te recomiendo que lo conviertas en un alias y te ahorres algunos dolores de cabeza graves.
git config --global alias.latest "para-cada-ref --sort = -committerdate --format = '% (committerdate: short)% (refname: short) [% (committername)]'"
O al menos no deberían usar git culpa
sin una de las opciones de banderas abajo. La culpa de Git es poderosa; Es básicamente como usar la ciencia para probar que tienes razón. Pero tenga cuidado, muchos cambios son superficiales y encontrar la fuente real del código en cuestión requiere un poco más de búsqueda. Cosas como eliminar espacios en blanco, mover texto a nuevas líneas o incluso mover texto de otro archivo pueden ignorarse para llegar al autor original del código mucho más fácil.
Antes de culpar a alguien, asegúrese de marcar uno de estos:
git blame -w # ignora el espacio en blanco git blame -M # ignora el texto en movimiento git blame -C # ignora el movimiento del texto a otros archivos
De vez en cuando, debe buscar una línea de código que sabe que escribió pero que simplemente no puede encontrar. Podría quedar atrapado en una rama distante, eliminarse hace mucho tiempo o esconderse en un sitio plano; pero de cualquier manera puedes encontrar cualquier cadena en todo tu historial de git combinando algunos comandos. Primero, vamos a obtener una lista de todas las confirmaciones, y luego grep cada una de ellas para nuestra cadena.
git rev-list --todos | xargs git grep -F ''
Probablemente tienes un amigo que accidentalmente ha enviado datos confidenciales a un repositorio: claves de acceso, contraseñas, la receta secreta de marinara de tu abuela. Lo primero que deben hacer es cambiar sus contraseñas y revocar el acceso con esas claves (y pedir disculpas a su abuela). A continuación, querrá buscar el archivo ofensivo y eliminarlo de todo el historial de git, que suena mucho más fácil de lo que realmente es. Una vez que se complete este proceso, también se eliminarán los datos confidenciales de cualquier persona que introduzca los cambios limpios. Las bifurcaciones de su repositorio que no combinan sus cambios en sentido ascendente seguirán conteniendo los archivos comprometidos (así que no omita cambiar las contraseñas y revocar las claves de acceso).
Primero, reescribiremos el historial de git para cada rama, eliminando el archivo con los datos confidenciales..
git filter-branch --index-filter 'git rm --cached --ignore-unmatch'--prune-empty --tag-name-filter cat - --all
Agrega el archivo a .gitignore
y comprometerse a actualizar .gitignore
.
eco>> .gitignore git agregar .gitignore git commit -m "Agregar sensible archivo a gitignore "
Ya que estamos reescribiendo el historial, deberá forzar los cambios a su control remoto.
git push origin master --force
Los archivos comprometidos aún existen en su repositorio local, por lo que deberá realizar algunas tareas de limpieza para eliminarlos por completo..
rm -rf .git / refs / original / git reflog expire --expire = now --todos git gc --prune = now git gc --aggressive --prune = now
El repositorio de su amigo debe estar libre de datos confidenciales y usted será el héroe por ayudarlos con su conocimiento profesional. (a través de StackOverflow y GitHub)
Trabajar con el código de otra persona en su entorno puede significar que necesita realizar cualquier número de cambios de configuración para que la aplicación se ejecute. Es muy fácil cometer un cambio accidental en aquellas configuraciones que fueron diseñadas exclusivamente para su entorno. Entonces, en lugar de estar siempre atento a esos archivos y dejarlos en el área de preparación "modificada", simplemente puede indicar al índice de git que ignore los cambios en ese archivo. Puedes pensar en esto como un archivo ignorado por git que permanece con el repositorio. (a través de Arnaud Coomans)
git update-index - asume-unchanged
A veces, comenzar de cero es exactamente lo que necesita hacer, por varias razones. Tal vez haya heredado una base de código que no puede garantizar que sea seguro para el código abierto, tal vez solo vaya a intentar algo completamente nuevo, o tal vez esté agregando una rama que tenga un propósito diferente que usted desea mantener con el repo (como GitHub Pages). Para este caso, hay una forma muy sencilla de crear una nueva rama en su repositorio que esencialmente no tiene historial. (a través de Nicola Paolucci)
pago de git - orphan
Deje de perder tiempo escribiendo comandos largos y cree algunos alias útiles.
Ninguna discusión sobre git estaría completa sin hablar de varios alias que, literalmente, le ahorrarán minutos al año en las pulsaciones de teclas guardadas. Deje de perder tiempo escribiendo comandos largos y cree algunos alias útiles. Se pueden hacer alias agregándolos a su archivo .gitconfig o usando la línea de comandos git config - alias global.
. A continuación se muestra solo una muestra de alias que puede utilizar como un trampolín para obtener ideas..
co: con un flujo de trabajo de rama de función, se moverá entre ramas regularmente. Sálvate seis personajes cada vez..
co = pago
ds: Siempre es una buena práctica revisar los cambios que va a confirmar antes de realizar la confirmación real. Esto le permite detectar errores tipográficos, la inclusión accidental de datos confidenciales y el código de agrupación en grupos lógicos. Realiza tus cambios y luego utiliza git ds
Para ver la diferencia de esos cambios..
ds = diff - staged
S t: deberías estar bastante familiarizado con la salida detallada del estado de git. En algún momento querrá omitir toda la formalidad y ponerse a trabajar. Este alias muestra la forma corta del estado e incluye los detalles de la rama.
st = estado -sb
enmendar: ¿Olvidaste incluir un archivo con tu última confirmación o quizás tuviste una modificación que debías hacer? Modifica los cambios por etapas de tu último compromiso..
enmendar = cometer - enmendar -C CABEZA
deshacer: a veces, modificar su último compromiso no es suficiente y tendrá que deshacerlo en su lugar. Este alias retrocederá un compromiso y dejará los cambios de ese compromiso por etapas. Ahora puede realizar cambios adicionales o volver a comprometerse con un nuevo mensaje..
deshacer = reiniciar --soft HEAD ^
ls: trabajar en una base de código con un grupo de desarrolladores significa tratar de mantenerse al día con lo que la gente está trabajando. Este alias proporcionará un registro git de una línea que incluye la fecha y el nombre del remitente.
ls = log --pretty = formato: "% C (amarillo)% h% C (azul)% ad% C (rojo)% d% C (restablecer)% s% C (verde) [% cn]" - decorar - fecha = corto
Levántate: este alias es ideal para revisar en qué trabajaste ayer para cualquier tipo de standup diario, o simplemente para refrescar tu memoria por la mañana.
standup = log --since 'hace 1 día' --oneline --author
grafico: un historial complejo de git puede ser difícil de revisar en línea recta. El uso de la bandera del gráfico le muestra cómo y cuándo se agregaron las confirmaciones a la rama actual.
graph = log --graph --pretty = format ':% C (yellow)% h% Cblue% d% Creset% s% C (white)% an,% ar% Creset'
Git puede ser increíblemente simple y al mismo tiempo complejo. Puede comenzar con lo básico y trabajar en una manipulación de gráficos más compleja a lo largo del tiempo. No hay necesidad de asimilarlo todo antes de poder usarlo. El comando que será más poderoso a medida que aprendas es hombre git-
. Intenta usarlo antes de referirte a Google para una respuesta.
Puede obtener más información sobre cómo la compañía en la que trabajo para usted, New Relic, usa git en nuestro blog, o probar New Relic Pro de forma gratuita. ¡Gracias por leer! Si tiene alguna pregunta, háganoslo saber más abajo.!