Ahora que ya estamos trabajando sobre aplicaciones Rails, veamos como nuestra aplicación demo miblog_demo creado en el anexo http://www.youtube.com/watch?v=AM_NAfhbNqU , lo organizamos bajo un control de versiones. Un sistema de control de versiones es una de las principales herramientas para cualquier programador que estè trabajando solo o con un equipo de cientos de personas, Ademàs porq nos permite llevr un histórico de todos cambios realizados en los ficheros, esto nos permitirá recuperar versiones pasadas en caso lo eliminemos por error.
Existen muchas opciones de herramientas de control de versiones, pero la comunidad de Rails tiene estandarizado en gran medida a Git. Además porque Git está desarrollado sobre Rails. Git es un tema muy amplio, pero en este video les enseñaré de algunos comandos básicos q siempre debemos de tomar en cuenta. Si deseas profundizar en Git te recomiendo ProGit, en la zona de recursos te dejo el link para q accedas al libro. (Recomendar http://git-scm.com/book/es/).
Los pasos para instalar Git en Linux, Mac y Windows, lo dejo para q leas en el siguiente link: http://www.git-scm.com/book/en/Getting-Started-Installing-Git.
Si usas la distribución derivada de ubuntu, lo instalas de la siguiente manera:
$sudo apt-get install git
Después de tenerlo instalado, configuremos git , esto lo hacemos sólo una vez, para listar la configuración que viene por defecto, lo hacemos con:
>>>
$ git config --list
$ git config --global user.name "Elicia"
$ git config --global user.email "[email protected]"
Ahora seguiremos algunos pasos que son necesarios para crear un nuevo repositorio. Nos dirigimos a la raíz de nuestro directorio de la primera aplicación e inicializamos un nuevo repositorio.
>>>
$ git init
Initialized empty Git repository in /home/elicia/proyectos_rails/miblog_demo/.git/
El siguiente paso es añadir los archivos del proyecto al repositorio. Por defecto Git agrega todos los cambios de todos los archivos de Rails y algunos archivos inclusive cambian constantemente. Para ignorar ciertos archivos, y evitar que se agregen al repositorio, existe un archivo oculto llamado .gitignore localizado dentro de nuestro directorio raiz, el cual nos permite especificar que archivos no queremos que se agregen.
El siguiente código es el .gitignore creado por el comando de rails.
>>>
# See http://help.github.com/ignore-files/ for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config.
/.bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
Cambios realizados en el archivo .gitignore
>>>
# Ignore bundler config.
/.bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
# Ignore other unneeded files.
database.yml
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret
Agregamos todos nuestros archivos de nuestro nuevo proyecto de Rails a Git, para luego hacerle commit. Aqui el punto representa el directorio actual, y Git agrega de manera recursiva todos los archivos, carpetas y subdirectorios. Este comando agrega todos los archivos de proyecto al staging area, el cual contiene todos los cambios pendientes de tu proyecto. Puedes ver cuales archivos estan en staging area usando el comando status.
>>>
$ git add .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: Gemfile
# new file: Gemfile.lock
# new file: README.rdoc
# new file: Rakefile
# new file: app/assets/images/.keep
# new file: app/assets/javascripts/application.js
# new file: app/assets/javascripts/posts.js.coffee
# new file: app/assets/javascripts/users.js.coffee
# new file: app/assets/stylesheets/application.css
# new file: app/assets/stylesheets/posts.css.scss
# new file: app/assets/stylesheets/scaffolds.css.scss
# new file: app/assets/stylesheets/users.css.scss
# new file: app/controllers/application_controller.rb
Para decir a Git que queremos mantener los cambios usamos el comando commit.
>>>
$ git commit -m "app inicial"
[master (root-commit) 8a9dc66] app inicial
52 files changed, 772 insertions(+)
create mode 100644 .gitignore
create mode 100644 Gemfile
create mode 100644 Gemfile.lock
create mode 100644 README.rdoc
create mode 100644 Rakefile
.
.
.
Podemos ver la lista de commits con log
>>>
$ git log
commit e4628c3c205903a31d3f17a8747596036af713e9
Author: Elicia <[email protected]>
Date: Mon Feb 10 10:07:59 2014 -0500
app inicial
Suponemos que accidentalmente eliminamos un archivo. -rf: Recursive force, el cual va eliminando recursivamente todos los archivos, diretorios sin confirmaion explicita de eliminacion.
>>>
~/proyectos_rails/miblog_demo $ ls app/controllers/
application_controller.rb concerns posts_controller.rb users_controller.rb
~/proyectos_rails/miblog_demo $ rm -rf app/controllers/
~/proyectos_rails/miblog_demo $ ls app/controllers
ls: cannot access app/controllers: No such file or directory
~/proyectos_rails/miblog_demo $ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: app/controllers/application_controller.rb
# deleted: app/controllers/concerns/.keep
# deleted: app/controllers/posts_controller.rb
# deleted: app/controllers/users_controller.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
~/proyectos_rails/miblog_demo $ git checkout -f
~/proyectos_rails/miblog_demo $ git status
# On branch master
nothing to commit, working directory clean
~/proyectos_rails/miblog_demo $ ls app/controllers/
application_controller.rb concerns posts_controller.rb users_controller.rb
~/proyectos_rails/miblog_demo $
>>>
$ ls app/controllers/
application_controller.rb
$ rm -rf app/controllers/
$ ls app/controllers/
ls: app/controllers/: No such file or directory
Verificamos el stado:
>>>
$ git status
# On branch master
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: app/controllers/application_controller.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
Con checkout deshacemos los cambios -f: forzamos a sobreescribir los cambios actuales.
>>>
$ git checkout -f
$ git status
# On branch master
nothing to commit (working directory clean)
$ ls app/controllers/
application_controller.rb
Es tiempo de subir todo nuestro código a Github, esta es un sitio social de codificacion y optimizado para alojar y compartir repositorios. Permite tener una copia de seguridad de nuestro código y la colaboracoón es màs fácil.
Para esto debemos tener una cuenta en GitHub. Y crear un nuevo repositorio, luego.
>>>
~/proyectos_rails/miblog_demo $ git remote add origin https://github.com/DevCodela/Curso-Rails
~/proyectos_rails/miblog_demo $ git push -u origin master
Username for 'https://github.com': Elicia
Password for 'https://[email protected]':
Counting objects: 101, done.
Compressing objects: 100% (93/93), done.
Writing objects: 100% (101/101), 20.56 KiB, done.
Total 101 (delta 8), reused 0 (delta 0)
To https://github.com/DevCodela/Curso-Rails
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
~/proyectos_rails/miblog_demo $
De esta manera todos los archivos se suben al repositorio creado en Github.