>> ANNA WHITNEY: Así que voy para hablar acerca de cómo usar Git,
y por qué usted debe cuidar.
Git es una herramienta de control de versiones.
Probablemente usted está familiarizado con algo así como Google Docs o Dropbox,
otras cosas que le permiten compartir versiones de las cosas y hacer un seguimiento de los cambios
usted ha hecho a diferentes documentos.
Lo que pasa es GitHub que está optimizado para el código
y le da una gran cantidad de control sobre exactamente qué cambios
a mantener y qué cambios te deshaces de y cuyos cambios se incorporan.
Así que esa es la gran razón por la de por qué te gustaría usar Git.
>> Porque usted no puede realmente código muy bien en Google Docs.
Usted está limitado a esa interfaz.
Es un poco más difícil de incorporar, como OK, alguien
hecho este cambio y alguien otro hecho que este otro cambio.
Y desea mantener el primera mitad del primer cambio
y la segunda mitad del segundo cambio y tiene todo lo demás permanece igual.
Git te permite hacer las cosas muy precisa.
Y por lo que si usted está trabajando en el software, es bastante común el uso de Git en el trabajo.
>> Y es más o menos la mejor manera hacer la colaboración en software.
Hay algunos otros de control de versiones herramientas que puede utilizar en su lugar,
pero algo como esto va a ser necesario.
Porque una vez más, Google Docs en realidad no
cortarlo cuando estás tratando de escribir código en colaboración con otros programadores.
Tuvimos esta reciente XKCD que era bastante relevante.
Así que espero que al final de esta presentación,
será clear-- un poco clearer-- no sólo una lista de comandos
que se puede ejecutar para tener todo a trabajar, pero un poco más
de la razón de ser por qué estos comandos funcionan.
>> Así que vamos a saltar sobre cómo que en realidad utilizamos Git.
Y, de hecho, me voy para que aparezca brevemente aquí.
Si usted tiene su computadora portátil, usted quiere sacarla y abrir el IDE CS50.
Estamos sobre todo vamos a ser trabajando en el terminal,
no tanto, sólo estaremos haciendo un poco en los archivos.
Entonces, ¿qué vas a querer de hacer, sólo para obtener establecido aquí,
es la primera que va a abrir su Clave SSH file-- el archivo de clave pública.
>> No sé si usted ha hablado mucho acerca de las claves SSH, sino lo que quieres hacer
Es esto.
¿De acuerdo?
Y aparecerá este larga cadena de caracteres,
y lo que desea copiarlos.
Copie todo el asunto.
Sólo hacer eso.
Y entonces, si usted va a su perfil en GitHub, usted puede ir a Editar Perfil,
y luego bajo las claves SSH, vas a añadir una clave SSH.
Y puede que el título CS50 IDE.
Tiene sentido?
¿Todos conseguir ese paso?
>> Esto es sólo para que luego, cuando estamos utilizando el repositorio en IDE,
podemos acceder a él directamente y no tener que preocuparse de escribir en nuestra contraseña
cada vez que lo usamos.
OKAY.
Así que ahora cerramos eso.
Si alguien más quiere que yo añado al repositorio GitHub,
si acabas de llegar, no puedo hacer eso ahora.
Si usted tiene una cuenta de GitHub y usted No me has dicho tu nombre de usuario GitHub,
ahora es el momento.
¿Nadie?
OKAY.
Entonces voy a seguir adelante.
>> Correcto.
Así que primero vamos a hablar de ¿Cómo funciona un repositorio.
Usted tiene un repositorio público remoto.
Esto es lo que yo era sólo mostrando en GitHub.
He creado un repositorio.
Está alojado en algún lugar de los servidores de GitHub.
Y su público, cualquiera puede verlo.
Entonces lo que vamos que hacer es que vamos
para crear una versión privada local de ella en nuestras computadoras individuales.
Y de hecho, usted puede tener muchos de los que todos
apuntar al mismo repositorio público.
>> Y de hecho, también es posible tener múltiples repositorios públicos
que le guste, se obtiene alguna información de aquí
y alguna información desde aquí.
Pero eso es poco probable que sea relevante para sus proyectos finales o lo que sea.
Así que no voy a ir en ese momento.
Pero entonces, ¿cómo llegar de tener este repositorio público a distancia para realidad
tener esa copia local?
Utilice un comando llamado git clone, que literalmente sólo significa hacer una copia,
como que suena.
>> Y así, lo que vas a hacer es ir a la página repositorio en GitHub.
Usted va a copiar el URL clon, clon SSH
URL, porque nos establecimos claves SSH.
Si no los tiene, puede hacer clic en cambio en HTTPS y puedes usar eso.
Y luego aquí, en su espacio de trabajo directorio, nuevo clon de git, y luego
pegar.
Cuando se le pregunta si desea seguir haciéndolo, y decir que sí.
>> Y ahora, si me ves, hay un directorio
con el nombre del repositorio, cómo y por qué, para el seminario.
Y si enumeramos la archivos de aquí, se puede
ver que son los mismos archivos que se enumeran en la página web.
Así que ahora usted tiene un local de copia del repositorio.
Digamos que usted desea realmente hacer cambios en él.
Todos los cambios en Git son stored-- como la unidad fundamental
se llama un commit.
Un cometer es sólo una parte de trabajo que usted ha puesto juntos,
y tú has dicho GitHub, quiero salva esto como, estoy ahorrando mi trabajo,
esencialmente.
>> Y ha identificado por lo que es llamado un hash cometer, que
es básicamente un identificador único.
Pero la forma en que se genera es en realidad, GitHub
tiene un formato parecido informar todos los cambios que
en realidad fue al que comprometerse, y luego que hashes ese registro de los cambios.
Así que el hash comprometerse realmente dice que lo que sucedió en esa confirmación,
lo cambios realizados.
>> Así que hacer un compromiso, vamos a ir aquí y si sólo
abrir el archivo, nombres.txt, que se puede hacer desde la línea de comandos
con opennames.txt, y que aparecerá aquí.
A continuación, puede añadir su nombre.
Y a continuación, guárdelo.
Y ahora si escribe git status, se puede ver
que se modificó el filenames.txt.
Así GIT sabe que usted ha hecho un cambio.
Nada ha sido comprometido todavía.
>> Así que para decirle a Git, esta es una archivo que tiene cambios en ella
que yo te quiero en realidad ahorrar, lo hace gitaddnames.txt.
Y ahora si lo haces git status, podrás ver que todavía no se ha comprometido.
Pero ahora se sabe que se trata de una cambia que desea comprometerse.
Básicamente lo que pasa es usted tiene su directorio de trabajo,
y Git tiene un índice de lo que es pasó con el directorio de trabajo que
está listo para ser comprometido.
Y así, cuando se realizan cambios, que están en el directorio de trabajo.
Están en su ordenador.
Pero no han sido poner en ese índice todavía.
>> Y así, cuando hacemos git add, se mueve las cosas desde el directorio de trabajo.
Bueno, están todavía en el directorio de trabajo.
Pero copias a todos los cambios en este índice.
Y así entonces, cuando no git commit-- que
es lo siguiente que estamos va a hacer-- en realidad
los cometa y los pone en el historia permanente de su repositorio.
Y cuando usted se compromete, siempre debe poner un mensaje de cometer informativo.
>> Así que ahora si lo hacemos git status, que dice que no hay nada para cometer,
porque todos los cambios que se Hice ahora se han cometido.
Voy a tirar la accidental Los cambios que he hecho para eso.
Así que ahora usted puede ver, vamos a decir que esencialmente sólo
hizo cometer el púrpura, ¿verdad?
Estamos añadiendo en Al final de esta historia
que anteriormente cuando hice el archivo, nombres.txt, cuando por primera vez lo creé,
tal vez esa fue la naranja commit.
Y así entonces este cometen hachís debajo de la púrpura del diamante
sería de alguna manera no, indicar: en el form-- legible por humanos
pero indicaría alguna manera al funcionamiento interno de GitHub
que hicimos esta específica cambiar a la nombres.txt archivo.
>> Así que ahora usted tiene un cambio en su local, versión privada del repositorio.
Ahora ves sale el error en ambos sentidos, y, obviamente,
no sería muy útil si pudiéramos sólo alguna vez desea
tomar los cambios que se estaban en el repositorio remoto,
pero no teníamos forma de haciendo nuestros propios cambios.
Por eso queremos impulsar nuestros cambios al repositorio remoto.
Pero antes de empujar su cambios en el repositorio,
siempre hay que tirar de para asegurarse de que no
no han habido nuevos cambios en el tiempo desde que primero hizo ese cambio.
>> Así que me voy a hacer un git pull, y dice que ya hasta la fecha,
debido presumiblemente ninguno de ustedes empujado mientras yo estaba haciendo esto.
Pero lo que ahora puedo hacer git push.
Y ahora si me voy aquí, puedo ver que la más reciente cometerás
es éste que hice.
Ese cambio está ahora en el repositorio remoto.
Así que cualquiera que tiene su ordenador fuera, adelante y añadir su nombre.
Asegúrese de tirar antes de empujar, y luego empuje al repositorio remoto.
>> Y así tenemos que ser capaces de ver.
Así que la razón de que siempre querer tirar antes de empujar
es porque si tratas de empujar y no lo hace, y ya está
faltan algunos cometen que está en el mando a distancia servidor, sólo va a darle un error.
Pero si no le dan un error, sería sobrescribir
lo que la persona anterior había empujado.
Y usted no quiere perder su trabajo.
Así que vamos a ver.
>> ¿Alguien ha conseguido este trabajo?
AUDIENCIA: [inaudible].
ANNA WHITNEY: ¿Qué sucede cuando usted--
AUDIENCIA: [inaudible].
>> ANNA WHITNEY: Así que eres tiene problemas de tracción.
Lo que se dice que el error cuando intenta tirar?
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: No ningún error cuando se tire.
No dice nada cuando se tire?
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: OK.
Así que no sé mucho sobre su entorno específico
que tienes ahí.
Pero ¿cuál es el error que se obtiene cuando tratas de empujar?
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: OK.
Trate git principal origen de tracción.
Así como este.
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: Una vez más, no sé muy mucho de su entorno de desarrollo
específicamente.
Pero cuando acabo de estado escribiendo git pull, eso es
un poco de restar importancia a exactly-- que normalmente se dirá,
o puede que no normalmente, pero puede Git decirle exactamente dónde tirar de.
Entonces, ¿qué servidor remoto para tirar de.
Porque, como he dicho, no podría ser más de uno,
aunque no es por lo general en sólo una especie de toda la práctica del desarrollo día.
>> Y hablaremos en un poco sobre las ramas.
Eso es en realidad el siguiente lugar vamos.
Y así master sería el nombre de la rama.
¿Eso ayuda?
¿No?
Todavía no estoy trabajando?
¿Alguien más tiene que trabajar?
OKAY.
Así que puedo fingir.
Yo puedo pretender que soy un persona extra, pero estás
va a tener que darme un segundo para conseguir que la puesta en marcha.
>> Así que lo que estoy haciendo es que estoy creating-- estoy clonando
el repositorio en mi ordenador.
Pero primero tengo que añadir otro conjunto de claves SSH para que yo pueda hacer eso.
OKAY.
Así que ahora, ¿no?
>> AUDIENCIA: Entonces, el punto verde junto a algunos de ellos, ¿qué significa eso?
ANNA WHITNEY: Al lado de las claves SSH?
Eso sólo significa que yo tengo usado esas claves SSH recientemente.
Así que vamos a hacer lo mismo.
¿Ahora funciona?
OKAY.
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: OK.
Así que ahora si abro nombres.txt, Debería ser capaz de ver--
así que había que revisar un conflicto.
Correcto.
Así que vamos a deshacerse de estos.
Hablaremos acerca de la combinación conflictos en sólo un segundo,
pero esto es por eso que siempre quiere para asegurarse de que el tirón trabajó
antes de tratar de empujar.
Y fijar cualquier conflicto antes de empujar.
OKAY.
>> Pero así que aquí está un ejemplo de lo que se realice.
Si entro aquí, asegúrese de que Tengo la mayoría hasta la fecha cambia,
Bien, ahora sólo voy a usar esto.
Derecha OK.
Así que hice un cambio aquí.
Tengo que tener cuidado.
Tengo que salvar a este hecho.
Ahora ok.
Así que hay un poco raro cosas que hacer aquí,
pero no te preocupes demasiado por eso.
>> OKAY.
Así que ahora si abro nombres.txt y añado mi nombre otra vez,
Ahora puedo hacer lo mismo aquí.
Y te darás cuenta de que en lugar de hacer añadir y luego cometer,
He estado haciendo en el acceso directo de sólo hacer git commit-a y entonces m.
Lo cual, si tiene un archivo que ya existed-- en otras palabras,
que no crea un nuevo file-- no lo hace En realidad hay que añadir por separado la misma.
Se podía decir Git, cuando comprometo, quiero simplemente añada directamente.
Pero si ha creado un nuevo archivo, hay que añadir específicamente,
porque de lo contrario Git no seguirlo hasta que específicamente diga que lo haga.
¿Lo lamento?
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: Así que la cosa sobre Git es que para
para darle tanto control sobre exactamente los cambios que está utilizando
y cuáles no lo eres, a veces es un poco
no fácil de usar, que es por eso que estoy aquí.
Porque nadie tiene que dar una presentación sobre cómo utilizar Google Docs.
>> AUDIENCIA: Depende de la audiencia.
>> ANNA WHITNEY: OK.
Nadie tiene que dar una presentación sobre cómo
utilizar Google Docs para un grupo de estudiantes CS50.
Así que he mencionado brevemente que hay ramas.
Y desde el principio, ese cómic que yo mostré
hablado de Git que tiene un modelo de árbol.
Así que lo que eso significa es, digamos que los repositorios, como la forma en que
lo tiene en este momento, es la línea roja.
Y usted sabe, está hecho de un montón de confirmaciones.
Imagínese como una longitud a lo largo de que línea equivale a recibir una confirmación.
>> O algo así, hay un montón de diferentes commit en ese país.
No importa realmente cuántos.
Pero así que vamos a decir que ahora tengo una pieza de trabajo de software que es
pasando ahí.
En lugar de representar a nuestro pequeño repositorio que es sólo para la prueba,
tal vez es un proyecto real.
Tal vez sea su proyecto final.
Tal vez es una pieza de software que es como ser efectivamente utilizada comercialmente.
Cuando usted quiere agregar una nueva función, no quieren romper su código existente.
>> Así que en lugar de hacer esos cambios derecha
en medio de su código de trabajo, puede crear lo que se llama una rama.
¿Y dónde comienza la rama, todo lo que es idéntica a
en su rama regional, que se llama maestro, de forma predeterminada.
Y luego a medida que agrega más comete, divergen.
Y usted puede llegar a tener más se compromete en una rama que otro.
Usted puede incluso tener ramas sub fuera de otras ramas.
>> Y por lo que si desea crear una rama, y ​​las ramas
se puede local-- lo que significa que son sólo en su máquina,
son sólo para usted personalmente trabajando en eso feature--
o si se puede empujar a el repositorio remoto y
y alguien más puede colaborar en esa rama,
colaborar en esa característica la forma en que lo haría en maestro.
Así que ahora estoy actualmente en la rama principal.
El IDE es lo suficientemente inteligente como para decir yo no sólo lo que el directorio en que estoy,
sino específicamente qué rama que estoy.
>> Así que ahora si quiero crear una nueva rama, el comando
es un poco unintuitively git checkout -b, por rama.
Y a continuación, el nombre que me quiere dar la rama.
Así que me voy a hacer una rama llamada rama anna.
Y ahora dice que estoy en la rama de anna.
Y si miro en estos archivos, entonces usted
ver que ellos son exactamente los mismos que eran.
No he cambiado nada por ir a una sucursal.
>> Pero ahora déjenme decirles que quiero hacer algunos cambios en esta rama.
Así que tengo esta otra archivo, loremipsum.txt,
se acaba de recibir un montón de palabras incomprensibles en ella.
Así que si abro esto, digamos que quiero para cambiar la primera palabra a mi nombre.
Usted puede hacer esto por su cuenta.
Y luego lo guardo.
Ahora voy a cerrarla así que no me quedo accidentalmente
la edición de los archivos cuando no me refiero a.
Así que ahora puedo cometer este.
>> Y yo no voy a empujar este cometido.
Esta es sólo va a ser local por ahora.
Debido a que en la actualidad, no hay una rama de aquí se llama rama anna.
Yo podría crear uno.
Si yo quería compartir mi trabajo en rama anna con todos ustedes,
Que podría crear, podría empujar y Git que decirme cómo crear una rama
llamada rama anna en el repositorio remoto.
>> Pero si usted está trabajando en una característica Y tú eres el único que trabaja en él,
es su función, a continuación, no hay ninguna razón en particular
para empujarlo al repositorio remoto.
Puede actuar como una copia de seguridad.
Pero si usted es bastante seguro que el equipo no se va a morir,
entonces hay algunas ventajas a sólo mantener en su ordenador.
Aunque yo no voy a entrar en los a menos que tengamos un poco de tiempo al final.
Así que ahora tengo una rama llamada rama anna.
>> Y permítanme crear un archivo.
Esta es una manera de crear un vacío presentar con un nombre dado en Unix
con sólo el comando touch.
Así que sólo voy a toque un archivo llamado anna.
Ahora bien, si yo-- y se puede ver que el archivo es allí--
que dice que hay un archivo sin seguimiento.
Así que ahora tengo que hacer lo que tienes que hacer git add.
Y ahora se sabe que existe este nuevo archivo.
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: En la rama anna.
Sí.
En sólo un segundo, veremos que cuando Vuelvo al maestro, no está ahí.
El comando para ver el vigente ramas es git branch,
y te muestra cuál estás.
Hay una variedad de otros comandos asociados
con eso que le permiten hacer diferentes cosas para sucursales,
pero la rama justo git en su propia voluntad mostrar lo que la rama que te encuentres,
y lo que las otras ramas que están en el equipo local.
>> Así que ahora que volver al maestro, lo hago git checkout master, sin -b.
Se utiliza el -b si estás la creación de una rama.
Y si usted no está creando una rama, entonces el nombre del comando
hace un poco más de sentido, porque como me dejes ir echa un vistazo a maestro
y ver lo que está pasando allí.
Así que ahora si hago esto, no hay ningún archivo de anna.
Si abro este archivo, se puede ver que no hay ningún cambio en él.
Y por eso, ahora PUEDO algunos cambios por aquí.
Así que puedo sacar provecho de esto, por ejemplo.
>> Y puedo tocar a otro archivo llamado maestro.
Y por lo que ahora se puede ver que tengo algunos cambios que no han llevado a cabo
que están en Loremipsum, y yo tengo este nuevo archivo.
Así que ahora voy a agregar el nuevo archivo.
Y voy a cometer.
Y de nuevo, a pesar de que añadió un archivo en concreto y no
añadir el archivo que ya existido, porque estoy utilizando el -a,
todos los archivos que ya existido logrará cuidado.
OKAY.
>> Así que ahora las ramas todavía están allí.
Y una rama aún está allí.
Pudiera volver atrás en rama anna y mostrar que mis cambios aquí en master
no han afectado a eso, pero me imagino que tuvo la idea de cuando fui a dominar
y funcionó de esa manera.
Ahora digamos que quiero en realidad incorporar esos cambios al maestro.
Terminé mi función.
Esta funcionando.
Lo he probado, funciona.
Y ahora quiero incorporar esa característica
en la pieza principal del software.
Terminaste el más simple versión de su proyecto final,
pero que en realidad tenía un poco de tiempo extra
así que volvimos y creado esta nueva característica,
y ahora desea combinar en forma que en realidad se puede mostrar a su TF.
>> No en vano, esta se llama un git merge.
Y que vimos antes cómo puede tener conflictos de combinación,
y usted va a tienen que resolverlos.
Así que si me voy de aquí y de master-- ahora estoy en master
y quiero fusionar en el cambios de branch-- anna
así que voy a hacer git rama anna combinación.
Y primero intenta AutoMerge.
Y si no hubiera cambios conflictivos,
si yo había creado el presentar anna anna en la rama,
y acaba de crear el archivo dominar en la rama principal,
entonces sería simplemente hacer una combinación de auto y
comprometería el resultado automáticamente.
>> Pero si usted tiene fusionar conflictos, entonces usted
que arreglar los conflictos antes de la fusión puede seguir adelante.
Así que ahora, si entro en Loremipsum, vemos la misma cosa
que vimos antes, donde hay los dos cambios diferentes.
Y puedo aceptar, ya sea uno de ellos.
Incluso puedo tenerlos ser uno encima del otro,
si eso tiene sentido para lo que estoy haciendo.
En el código, por lo general vas a querer una versión o la otra
si ambos hicieron cambios a eso.
>> Parece que hay probablemente, en esta interfaz, una cierta manera de fantasía para mí
a aceptar un conjunto de cambios o la otra.
Pero ya no lo hago realidad saber cómo funciona,
Yo sólo voy a tratar de hacer esto mano, lo que no está funcionando tan bien.
Así que déjame hacer esto como yo saber cómo, que es [inaudible].
Y vamos a tomar el de maestro, porque mi nombre de verdad
no es tan importante que tiene que ir en todo.
>> Ahora sólo para mostrar que esa realidad Hice lo que dijo que haría, ahí está.
Así que ahora, si lo hago status-- git y puedes ver que sabe que está en el merge--
porque he cambiado este archivo que tenían los conflictos de combinación en el mismo,
Tengo que añadir que de nuevo para que se sabe que es seguro para cometer.
Así que voy a añadirlo.
Y entonces yo sólo voy a no comprometerse en lugar de poner en un mensaje,
porque va a generar automáticamente una confirmación de mensaje que dice algo
acerca de lo que los conflictos eran.
>> Ahora fusionar los mensajes de confirmación no son siempre muy útil,
pero si no había conflictos, que acaba de auto generar ese mensaje
y no necesariamente tener la oportunidad de editarlo.
Simplemente iría automáticamente en su historia se comprometen con este mensaje.
Yo en realidad no sé cómo, ah sí.
Allá vamos.
Eso es justo, lo abre automáticamente en un editor de texto que
pasa a ser establecido como el defecto. Que podría tener lugar
git commit -m hecho y después sólo una cadena de cotización vacía.
Y lo haría de forma automática hacer el mensaje de combinación
sin tener que frente a cualquier editor
que piensa que debe utilizar para el mensaje de confirmación.
>> Correcto.
Así que fue una gran cantidad de comandos y una gran cantidad de bits de información sólo
muy rápidamente.
¿Alguien tiene alguna pregunta?
Sé que la mayoría de ustedes no lo hacen en realidad tienen en marcha y funcionando.
>> AUDIENCIA: Entonces, ¿la rama anna todavía existen en este momento [inaudible]?
>> ANNA WHITNEY: Así que si lo hago git branch-- así que la pregunta era,
hace la rama anna aún existen ahora que he fusionado en maestro.
Sí lo hace, pero puedo borrarlo.
Así lo típico es, sí, si ha creado
una rama de la característica y la característica tiene sido completamente fusionado en maestro,
y usted no está planeando hacer trabajar más en esa función,
si ha creado una nueva función o si quería empezar a crear una nueva característica,
debe crear una nueva rama sólo para en aras de la limpieza y la organización.
>> Así que ahora lo que puedo hacer para eliminar esa rama es rama anna git rama -d.
Y si no hubiera fusionado en anna rama antes de que yo traté de hacer eso,
me daría un error que dice que rama anna no está completamente fusionado.
En otras palabras, los cambios que se en la rama anna no son en ningún otro lugar.
Así que si elimina la rama, si no se pierden esos cambios.
Pero debido a que acababa de fusionó, Git es lo suficientemente inteligente
saber que la rama anna es totalmente incorporado en maestro.
>> Y es realmente posible Eliminar una rama si realmente
no quieren deshacerse de sus cambios.
Es posible borrar una rama que no se fusionaron.
Todo lo que usted realmente tiene que hacer es cambiar la d minúscula existe
a una mayúscula D. Pero es en general, no es una buena idea,
por lo que se obtiene una error si intenta hacer eso.
¿Otra pregunta?
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: Así que si usted tenía la prueba y entornos de producción,
¿cómo podría relacionarse a las ramas?
Así que esto era sólo un ejemplo de una rama que es para una característica
y luego te deshaces de la misma una vez que se fusionó.
También es posible tienen sucursales larga corriendo
que se utiliza para una parte de su proceso de desarrollo.
Así que bien podría tener un banco de pruebas.
Y hay todo tipo de maneras para integrar otros servicios
para conectar e interactuar con Git.
Así que usted podría tener su rama de pruebas ejecutará automáticamente pruebas en ese código.
>> Así como usted tiene su rama de desarrollo,
y luego usted tiene su producción rama, y ​​que tenga su banco de pruebas.
Y usted tomaría sus cambios de la rama de desarrollo,
de alguna manera incorporarlos a la banco de pruebas utilizando algún flujo de trabajo, que
podría ser una fusión, como si acabara mostré.
Y entonces lo haría, desde allí, sería ejecutar las pruebas.
Usted podría tener que configurar para hacerlo de forma automática, incluso.
Y entonces usted podría incorporar que en su rama de producción.
Eso responde tu pregunta?
¿Alguna otra pregunta?
>> Porque de aquí, vamos desde los comandos git estándar
que sin duda utilizar cualquiera vez que están tratando de hacer un proyecto
y llegar a algo que es un poco más esotérico
y más como otra forma de hacer algunas de las mismas cosas
que ya hemos hablado.
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: No, como más inusual.
OKAY.
Así es todo bastante claro al respecto?
En lo que ha sucedido hasta el momento y por qué esta es la forma en que íbamos a hacer las cosas?
Tiene sentido?
Excelente.
Así que en lugar de la fusión, o a veces, además de la fusión,
hay otra manera de incorporar cambios de una rama en otra,
y eso se llama un cambio de base.
Y es casi como lo contrario de una fusión.
>> Así cambio de base es diferente de todo lo que hemos hablado hasta ahora
ya que en realidad vuelve a escribir su historia.
Y algunas personas piensan que esto es algo
nunca se debe hacer nunca en Git.
Pero esta es una característica que Git ofertas, así que estoy de la opinión
que es perfectamente bien, siempre como ustedes saben cómo hacerlo correctamente.
En definitiva, es el caso que nunca debe reescribir la historia pública.
Así que esto es lo que era hablando de antes, cuando
Dije que hay algunas ventajas a tener una rama que es
sólo locales en su máquina.
Eso significa que usted puede usar trucos como esto, y voy a ir a un poco más
por qué es posible que desee hacer esto en un segundo.
Pero justo renuncia masiva para iniciar con, no reescribir la historia pública.
Debido a que usted vio antes lo que ocurre si usted no hace la combinación correcta,
cuando se tire.
>> Si reescribiste, si tuviera reescrito la historia
y luego que estaba tratando de tirar, Git estaría volviendo loco con 1.000 errores
diciendo que hay nebulización commits aquí que les gusta, que tiene.
Pero luego hay otras confirmaciones usted no tiene que están aquí.
Por lo tanto, podría pensar que todo estaba supone que ya han sucedido.
No sería coincidir con lo fue en su máquina.
No vuelvas a hacer eso a sus colaboradores.
Nunca reescribir la historia pública.
>> Pero se puede reescribir la historia local, y hay algunas buenas razones para hacerlo.
Así que primero, lo que sucede cuando usted rebase?
Digamos que tengo la rama principal en rojo,
y luego la rama azul en azul.
Mientras estoy en la rama azul Yo podría escribir master git rebase,
por lo que es una especie de lo contrario dirección desde la fusión.
Estoy rebase el de dominar.
Y significa, literalmente, que estoy tomando los commits
que hice en la rama azul y poner al final de master
como su base.
>> Así que, esencialmente lo que hace es que incorpora
todas las confirmaciones que han sucedido el maestro desde el punto de ramificación
como si hubieran sucedido antes de que todo el commit que están en la rama azul.
¿Eso conceptualmente tiene sentido?
Así que la razón principal para hacerlo es que permite que tus commits realidad
especie de-- un individuo comprometerse puede ser una unidad de trabajo
y que puede ser clara en la historia.
Y usted no tiene estos se fusionan comete donde no es obvio
qué características nos están fusionamos o qué cambios se hicieron realidad,
porque usted no tiene acceso a las commit reales que
se hicieron antes de la fusión, ¿verdad?
>> No es que no siempre es obvia desde el registro, que en realidad, eso es
algo que mirar.
Si hago esto, se puede ver el registro.
El comando se acaba de obtener registro, y puedes mirar a través de todas las confirmaciones sobre las previas.
Así que ya ves que hay otra fusionar cometer aquí.
Esto es lo que sucedió cuando usted está teniendo problemas para tirar y empujar anterior.
Así que algunos de ellos son bastante claras, éstas mensajes que gusta, he añadido un archivo,
De Scott puso su nombre en el archivo.
Cosas así.
>> Pero entonces tenemos estos fusión comete y no es muy obvio
que esta pasando.
Rebase le permite evitar eso.
Así que incluso si todavía quieres fusionar, incluso si todavía
querer hacer la exacta lo mismo, puede evitar
que tiene una combinación de cometer, porque digamos que-- así que vamos a hacer esto.
Voy a crear una nueva rama.
Y ahora estoy en esta nueva rama.
Y yo voy a hacer algunos cambios aquí, Basta con crear un nuevo archivo.
>> Correcto.
Y ahora, cuando se fusionan, así que estoy todavía sólo va a fusionar la forma normal.
Voy a volver a dominar.
Y yo voy a fusionar nueva sucursal.
Y verás que dice el avance rápido.
Eso significa que sólo había cambios en un lado de la fusión.
Por lo tanto, no tiene que preocuparse de que cambia debo aceptar.
Ni siquiera tiene que resolver conflictos de auto.
Ni siquiera tiene que pensar sobre si hay conflictos.
Porque sabe hubo confirmaciones eran Sólo añadido en un lado de la combinación.
Así que sólo puedo mover la cabeza de la otra rama hasta después de esas confirmaciones.
>> Así que lo que puede hacer con cambio de base es garantizar
que todos commits-- lo siento, que todos fusiones son el avance rápido se confunde.
Así que si usted tiene un local de rama sólo en su computadora
y que haya hecho un manojo de los cambios en allí,
otro desarrollo que está pasando en maestro.
Todos sus colaboradores, todos los de su compañeros de trabajo, todos los miembros de su proyecto
han estado haciendo su propios cambios para dominar.
Tal vez ellos comenzaron originalmente sus cambios en las ramas
pero luego han fusionaron en o algo así.
Pero el cambio ha ocurrido en el maestro.
>> Y usted está trabajando en una entidad y está en un archivo completamente separados,
así que no hay ningún conflicto.
Usted puede reajustar su sucursal eso es solo local para usted, el de dominar.
Así que cuando combina en ella, que no tiene que preocuparse de nada de esto.
Es sólo una fusión de avance rápido.
Y no lo hace aun crear una fusión cometió.
Es, literalmente, sólo dice, bien, pude poner todas estas confirmaciones en esta rama
así como.
Tiene sentido?
>> ¿Tiene sentido por qué te gustaría hacer esto, y cómo te gustaría hacerlo?
>> AUDIENCIA: Así que en otra Es decir, que están diciendo
tomar todo el trabajo que ha estado hecho de dominar [inaudible].
ANNA WHITNEY: Sí, exactamente.
Así que esto puede parecer un poco tonto porque es sobre todo acerca de la estética.
Es también un poco trata de hacer las cosas más claras.
Pero no está haciendo una gran diferencia de cómo en realidad se escribe el código.
Algo que puede ser más útil en la práctica regular
es cuando usted está haciendo git pull, usted puede agregar esta opción para él.
Ah.
Así que ya lo hice un montón de cosas, tengo un conflicto.
Pero cuando usted hace un rebase, usted puede tener conflictos
al igual que usted tiene en una fusión, y puede resolver de la misma manera.
>> Pero lo que la idea básica es que cuando hago esto,
dice primer jefe de rebobinado jugar su trabajo en la parte superior de la misma.
Y está, literalmente, va a volver, que va a tomar todos los commits
que yo sólo puse de dondequiera que les he tirado,
desde el control remoto repositorio, y entonces es
va a jugar mi nuevo se compromete en la parte superior de la misma.
En otras palabras, se va para aplicar todos los cambios.
Así que si me preparo esto-- Interesante.
Tal vez eso es una diferencia del sistema.
>> Tan bien.
Así que la idea básica es que ahora si me veo en el registro,
Me ocuparé de que esto sumado mi nombre nuevo.
Así que en realidad esto no era antes-- lo siento, he hecho esto.
Espera.
estoy un poco confundido sobre el orden aquí.
Pero, en esencia, la idea es que hubo
algunas confirmaciones que se encontraban en el control remoto repositorio de que no se había hecho aquí.
Algo que me había empujado, que parece que tal vez accidentalmente
empujado de rama anna.
>> Pero en cualquier caso, cuando me sacó ningún commit que were-- sí.
Mira, en algún momento, accidentalmente empujado de rama ana,
porque tengo la comprometerse anna archivo añadido.
Se dará cuenta de que esa ahora está en allí antes.
No espera.
Eso es de la combinación.
A veces esto es un poco difícil de razonar sobre,
porque en realidad no estoy seguro razón por la que me dio conflictos allí.
Pero la premisa básica es que si Yo tenía un montón de commits-- lo siento.
>> Si otras personas han hecho un montón de comandos de dominar y que había habido
empujado a través del repositorio remoto, y tuve algunos commits locales que
No había empujado sin embargo, y lo hago git tire --- rebase, a continuación, cuando se tira,
en lugar de intentar fusionar, que va a tratar de rebasar.
Y la única diferencia es que entonces terminar con un limpiador de cometer historia,
y en este caso, en realidad tiene mucho más de una diferencia.
Porque si cada vez que tire usted está introduciendo una combinación de cometer,
entonces empieza a ser muy feo, muy rápido.
Y lo que es muy poco claro lo que en realidad estás haciendo.
>> Así que no lo haría necesariamente sugerir que usted
empezar a tratar de rebasar toda tu ramas en lugar de fusionarlos,
o antes de su fusión.
Pero sin duda sugieren que a medida que usted está haciendo esto,
que tal vez intentar tener una idea de git tire con la opción de rebase, --rebase,
porque eso va a recorrer un largo camino hacia la hacer su comprometerse historia más clara,
por lo que es más evidente que estas haciendo.
OKAY.
¿Alguien tiene preguntas últimos antes de que acaba de terminar.
¿Sí?
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: Eso no es mi convención de personal,
pero es una especie de convenciones, de manera más general.
Y yo no creo que sea real América.
Sí, así que algo de él es real América, pero es una especie de como--
AUDIENCIA: [inaudible].
>> ANNA WHITNEY: OK.
Déjame ver si puedo hacer esto correctamente.
Y entonces el git log debe en realidad mostrar algo útil.
Bien, ahora.
>> AUDIENCIA: De acuerdo, parece griego para mí.
>> ANNA WHITNEY: OK.
Así que ahora vamos a ver si el git registro muestra nada más útil.
Así que sí.
Esto fue cuando merged-- sí.
Así que el cambio fue cuando me fundí el nueva rama, y ​​he creado el nuevo archivo.
Y la última vez que había empujado, todavía dirigir mi nombre en el archivo Loremipsum.
Así que una vez que me fijo, entonces estos se aplicaron después, como si se
Originalmente se había hecho después.
Tiene sentido?
>> Si yo hubiera creado mis ramas para originalmente tratar de ilustrar
este concepto, puede ser que haya trabajado.
Pero yo no estaba seguro de si nos fueron incluso ir para llegar a esto.
Alguna última pregunta?
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: Sí.
No tiene que ser capaz de leer cosas
para guardarlos en un repositorio git.
Así que resulta que tengo aquí en formato PDF.
Así que todos ustedes, incluso si usted no firma para Git, puede utilizar este folleto.
Está en la página de repositorio.
Una vez más, se puede leer el repositorio, incluso si no estás
colaborador en el repositorio.
Pero es así, no lo hago específicamente editar el formato PDF, ¿verdad?
Pero si puedo guardar una nueva PDF allí, bajo ese nombre, puedo confirmar esos cambios
y empujarlos al repositorio.
>> Es una práctica estándar para menudo no tienen sus archivos binarios viven
en su repositorio a menos que sean va a ser-- si se trata de algo que es
como una acumulación de su solicitud, es probable que deshacerse de él
antes de comprometerse, o poner fuera del repositorio.
Debido sobre todo, como Git no puede manejar archivos de gran tamaño,
o específicamente GitHub no lo hará permitirá subir muy grande
archivos porque es demasiado mucha carga en sus servidores.
También es posible usar Git sin utilizar GitHub, en cuyo caso
usted puede utilizar su, es posible que capaz de mantener archivos de gran tamaño en ese país
si usted tenía su propio servidor.
Pero lo que es más una cuestión de tamaño que de la legibilidad.
¿Pregunta?
>> AUDIENCIA: [inaudible].
ANNA WHITNEY: Correcto.
Así que el avance rápido Merge es uno donde todo lo que estamos haciendo
se acaba de tomar algunos commits de un lado de la combinación
y ponerlos en el otro.
Así que si usted está en maestro, no han cambiado amo a todos.
Usted ha hecho un montón de cambios en su rama de la característica,
y se fusionan en la rama de la característica.
Debido a que no había cambios en maestro,
puede pensar en él como buscando en realidad gusta esta foto, en la parte inferior.
La flecha roja no ha progresado, así que todo lo que estás haciendo, esencialmente
está recogiendo esto.
Y ahora diciendo, OK, esto es sólo la flecha roja.
¿Eso tiene sentido?
>> Y es bueno porque no hay fusión cometió.
Usted sabe que no va a ser cualquier conflicto por definición.
Si hay algún conflicto, que ya los había resuelto
si se hizo algo como esto.
>> AUDIENCIA: [inaudible].
>> ANNA WHITNEY: En otras palabras, si tiene una imagen como esta
y que hizo una fusión de avance rápido para traer todas estas cosas aquí,
que es un poco difícil de verla en su manera dibujé estos diagramas porque
tendría todavía dos ramas separadas, pero que no se han ido distanciando todavía.
Usted puede pensar que es, básicamente, como, si usted tiene una flecha roja que
va todo el camino hasta aquí, pero tiene una roja y una punta de flecha azul,
y así que usted puede añadir más comete en cualquiera de ellos,
y entonces ellos se separan de nuevo.
Pero son los mismos hasta ese momento.
>> ¿Alguna otra pregunta?
Correcto.
Bueno, muchas gracias.