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.
[[email protected] ~]$ 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.
[[email protected] ~]$ cd project/
[[email protected] 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:
[[email protected] 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.
[[email protected] project]$ git status -s
M string.c
?? string
[[email protected] project]$ git add string.c
[[email protected] 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(-)
[[email protected] 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.
[[email protected] 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:
[[email protected] 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.
[[email protected] project]$ git status -s
M string.c
?? string
[[email protected] project]$ git add string.c
[[email protected] 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.
[[email protected] 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.
[[email protected] 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.
[[email protected] 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
[[email protected] 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.
[[email protected] 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