Git - Operación de actualización

Modificar función existente

Tom realiza la operación de clonación y encuentra un nuevo archivo string.c. Quiere saber quién agregó este archivo al repositorio y con qué propósito, entonces, ejecuta elgit log mando.

[tom@CentOS ~]$ git clone [email protected]:project.git

El comando anterior producirá el siguiente resultado:

Initialized empty Git repository in /home/tom/project/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 726 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

La operación Clonar creará un nuevo directorio dentro del directorio de trabajo actual. Cambia el directorio al directorio recién creado y ejecuta elgit log mando.

[tom@CentOS ~]$ cd project/

[tom@CentOS project]$ git log

El comando anterior producirá el siguiente resultado:

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Después de observar el registro, se da cuenta de que Jerry agregó el archivo string.c para implementar operaciones básicas de cadena. Tiene curiosidad por el código de Jerry. Entonces abre string.c en el editor de texto e inmediatamente encuentra un error. En la función my_strlen, Jerry no usa un puntero constante. Entonces, decide modificar el código de Jerry. Después de la modificación, el código tiene el siguiente aspecto:

[tom@CentOS project]$ git diff

El comando anterior producirá el siguiente resultado:

diff --git a/string.c b/string.c
index 7da2992..32489eb 100644
--- a/string.c
+++ b/string.c
@@ -1,8 +1,8 @@
#include <stdio.h>
-size_t my_strlen(char *s)
+size_t my_strlen(const char *s)
{
   - char *p = s;
   + const char *p = s;
   while (*p)
   ++p;
}

Después de la prueba, confirma su cambio.

[tom@CentOS project]$ git status -s
M string.c
?? string

[tom@CentOS project]$ git add string.c

[tom@CentOS project]$ git commit -m 'Changed char pointer to const char pointer'
[master cea2c00] Changed char pointer to const char pointer
1 files changed, 2 insertions(+), 2 deletions(-)

[tom@CentOS project]$ git log

El comando anterior producirá el siguiente resultado:

commit cea2c000f53ba99508c5959e3e12fff493b
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

Tom usa el comando git push para impulsar sus cambios.

[tom@CentOS project]$ git push origin master

El comando anterior producirá el siguiente resultado:

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 336 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
d1e19d3..cea2c00 master −> master

Agregar nueva función

Mientras tanto, Jerry decide implementar string comparefuncionalidad. Entonces modifica string.c. Después de la modificación, el archivo tiene el siguiente aspecto:

[jerry@CentOS project]$ git diff

El comando anterior producirá el siguiente resultado:

index 7da2992..bc864ed 100644
--- a/string.c
+++ b/string.c
30Git Tutorials
@@ -9,9 +9,20 @@ size_t my_strlen(char *s)
return (p -s );
}
+char *my_strcpy(char *t, char *s)
+
{
   +
   char *p = t;
   +
   + while (*t++ = *s++)
   + ;
   +
   +
   return p;
   +
}
+
int main(void)
{
   int i; 
   +
   char p1[32];
   char *s[] = 
   {
      "Git tutorials",
      "Tutorials Point"
      @@ -20,5 +31,7 @@ int main(void)
      for (i = 0; i < 2; ++i)
      printf("string lenght of %s = %lu\n", s[i], my_strlen(s[i]));
      +
      printf("%s\n", my_strcpy(p1, "Hello, World !!!"));
      +
      return 0;
   }
}

Después de la prueba, está listo para impulsar su cambio.

[jerry@CentOS project]$ git status -s
M string.c
?? string

[jerry@CentOS project]$ git add string.c

[jerry@CentOS project]$ git commit -m "Added my_strcpy function"
[master e944e5a] Added my_strcpy function
1 files changed, 13 insertions(+), 0 deletions(-)

Antes de la operación de inserción, verifica el compromiso viendo los mensajes de registro.

[jerry@CentOS project]$ git log

El comando anterior producirá el siguiente resultado:

commit e944e5aab74b26e7447d3281b225309e4e59efcd
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Jerry está contento con los cambios y quiere impulsar sus cambios.

[jerry@CentOS project]$ git push origin master

El comando anterior producirá el siguiente resultado:

To [email protected]:project.git
! [rejected]
master −> master (non-fast-forward)
error: failed to push some refs to '[email protected]:project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.

Pero Git no permite que Jerry impulse sus cambios. Porque Git identificó que el repositorio remoto y el repositorio local de Jerry no están sincronizados. Debido a esto, puede perder la historia del proyecto. Para evitar este lío, Git falló esta operación. Ahora, Jerry tiene que actualizar primero el repositorio local y solo después, puede impulsar sus propios cambios.

Obtener los últimos cambios

Jerry ejecuta el comando git pull para sincronizar su repositorio local con el remoto.

[jerry@CentOS project]$ git pull

El comando anterior producirá el siguiente resultado:

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git.server.com:project
d1e19d3..cea2c00 master −> origin/master
First, rewinding head to replay your work on top of it...
Applying: Added my_strcpy function

Después de la operación de extracción, Jerry verifica los mensajes de registro y encuentra los detalles de la confirmación de Tom con el ID de confirmación cea2c000f53ba99508c5959e3e12fff493ba6f69

[jerry@CentOS project]$ git log

El comando anterior producirá el siguiente resultado:

commit e86f0621c2a3f68190bba633a9fe6c57c94f8e4f
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function


commit cea2c000f53ba99508c5959e3e12fff493ba6f69
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer


commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t


commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

Ahora, el repositorio local de Jerry está completamente sincronizado con el repositorio remoto. Para que pueda impulsar con seguridad sus cambios.

[jerry@CentOS project]$ git push origin master

El comando anterior producirá el siguiente resultado:

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 455 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
cea2c00..e86f062 master −> master