usando los mismos comandos:
pi@erpi ~/test $ git add .
pi@erpi ~/test $ git status
On branch mybranch
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: testmybranch.txt
Podemos hacer commit de este cambio en la rama mybranch del repositorio local. Este cambio afectará a la rama mybranch, pero no tendrá efecto sobre la rama maestra:
pi@erpi ~/test $ git commit -m "Test commit to mybranch"
[mybranch d4cabf3] Test commit to mybranch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testmybranch.txt
pi@erpi ~/test $ git status
On branch mybranch
nothing to commit, working directory clean
pi@erpi ~/test $ ls
newfile.txt README.md testmybranch.txt testobject.o
De la salida anterior puede apreciar que el archivo testmybranch.txt se encuentra en el repositorio local y podemos verlo en el directorio.
Si ahora pasa de la rama mybranch a la rama maestra mediante git checkout master, observará algo interesante al solicitar un listado del directorio:
pi@erpi ~/test $ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
pi@erpi ~/test $ ls
newfile.txt README.md testobject.o
Así es, el archivo testmybranch.txt ha desaparecido del directorio. Aún existe, obviamente, pero se encuentra en forma de objeto blob (de BLOB, Binary Large OBject, objeto binario grande), dentro del directorio git/objects. Si regresa a la rama y lista el directorio, verá esto:
pi@erpi ~/test $ git checkout mybranch
Switched to branch 'mybranch'
pi@erpi ~/test $ ls
newfile.txt README.md testmybranch.txt testobject.o
Es decir, el archivo vuelve a aparecer. Por lo tanto, puede observar lo bien integrado que está el sistema de ramas de desarrollo. En este punto puede regresar a la rama maestra e introducir cambios en el código original y ver que los cambios introducidos en la rama mybranch no afectan al código maestro. Aun si cambiamos el código en el mismo archivo, carecerá de efectos sobre el código original de la rama maestra.
Cómo fusionar ramas de desarrollo (git merge)
¿Qué ocurre si deseamos aplicar los cambios introducidos en la rama de desarrollo mybranch a la versión maestra del proyecto? Es decir, ¿cómo fusionamos las dos ramas? Pues utilizaremos el comando git merge.
pi@erpi ~/test $ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
pi@erpi ~/test $ git merge mybranch
Updating 3eea9a2..d4cabf3
Fast-forward
testmybranch.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testmybranch.txt
pi@erpi ~/test $ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
pi@erpi ~/test $ ls
newfile.txt README.md testmybranch.txt testobject.o
Ahora el archivo testmybranch.txt está en la rama maestra y también se han aplicado el resto de cambios introducidos en cualquier otro documento de la misma. El repositorio local va ahora un commit por delante del remoto, y podemos utilizar git push para actualizar este último.
Cómo borrar una rama de desarrollo (git branch -d)
Para borrar una rama de desarrollo, use el comando git branch -d mybranch:
pi@erpi ~/test $ git branch -d mybranch
Deleted branch mybranch (was d4cabf3).
pi@erpi ~/test $ ls
newfile.txt README.md testmybranch.txt testobject.o
En este caso, la rama testmybranch.txt sigue presente en el proyecto maestro, como por otro lado deber ser, puesto que se ha fusionado con él. Si la rama se hubiera borrado antes de realizar la fusión, se habría perdido el archivo.
Comandos habituales de Git
La table 3-8 ofrece un resumen de los principales comandos de Git. Llegados a este punto, ya hemos visto el uso básico de Git. Cuando se desarrolla código directamente en el RPi, Git puede resultar muy útil, puesto que nos permite subir fácilmente nuestros desarrollos a un repositorio remoto. Esta funcionalidad sirve muy bien para realizar copias de respaldo de nuestro código, así como para volver a desplegar el proyecto en múltiples RPi.
Table 3-8: Resumen de los principales comandos Git.
Operación | Descripción | Operación | Descripción |
git clone | Realiza la clonación desde el repositorio remoto. | git rm | Elimina un archivo o directorio del área de preparación. |
git init | Crea un repositorio completamente nuevo. | git mv | Mueve o renombra un archivo o directorio en el área de preparación. |
git pull | Fusiona cambios desde un repositorio maestro. | git log | Muestra un log (registro) con los commits. El histórico del proyecto. |
git fetch | Encuentra los cambios en el repositorio maestro sin realizar la fusión. | git tag | Da nombre a un commit (por ejemplo: versión 2). |
git status | Muestra el estado del proyecto. | git merge [name] | Fusiona la rama. |
git add | Añade un nuevo archivo o edita un archivo existente. | git show | Obtiene detalles sobre el commit actual o sobre cualquier otro. |
git diff | Muestra las diferencias que pasarán al repositorio cuando se haga el commit. | git branch [name] | Crea una nueva rama de desarrollo. (Use el parámetro -d para borrar (delete)). |
git commit | Realiza commit en el reposi-torio. | git checkout [name] | Cambia a otra rama de desarrollo. |
git push | Envía los cambios desde un repositorio local a uno remoto. |
Cómo utilizar escritorios virtuales
El RPi es perfectamente capaz de actuar como plataforma de computación general, pero si planeamos compilar un núcleo de Linux o realizar desarrollo multiplataforma cruzado (véase el capítulo 7) lo más recomendable es utilizar un ordenador personal con Linux. Es posible utilizar un ordenador con un gestor de arranque que nos permita un sistema dual. Sin embargo, si mayoritariamente utilizamos un PC o un Mac, podríamos decantarnos por utilizar escritorios o máquinas virtuales.
La virtualización de escritorio, o creación de máquinas virtuales, como también se conoce esta tecnología, permite que un solo ordenador ejecute varios sistemas operativos al mismo tiempo. Emplea tecnología de hipervisores (monitores de máquinas o escritorios virtuales) que incluyen elementos hardware, firmware y software para crear y ejecutar entornos de emulación software conocidos como virtual machines, máquinas virtuales o VM, por sus siglas en inglés. Si queremos ejecutar múltiples sistemas operativos en un solo PC, las máquinas virtuales ofrecen una alternativa a la configuración de un gestor de arranque con múltiples sistemas operativos.
En un entorno de virtualización suele