Sie sind auf Seite 1von 55
Git httpyigitscm.com Git es un software de control de versiones distribuido pensado para la eficiencia y confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran numero de archivos de codigo fuente. El disefo de Git resulta de la experiencia del disefador de Linux, Linus Torvalds, manteniendo una enorme cantidad de cédigo distribuido y gestionado por mucha gente, que incide en numerosos detalles de rendimiento. Caracteristicas - Soporte al desarrollo no lineal. Las ramas en Git van muy baratas (crear una rama y fusionar posteriormente es trivial). - Desarrollo distribuido. Cada desarrollador tiene una copia local del repositorio. + Compatibilidad con protocolos y sistemas ya existentes: HTTP, FTP, rsync, 0 SSH. - Autenticaci6n criptografica del historial. Una vez hecho un commit no es posible hacer cambios sin ser detectado. Instalaci6n La instalacin de Git en Linux dependera de la plataforma, pero suele ser un proceso trivial ya que viene empaquetado en todas las distribuciones. # En Ubuntu/debian $ sudo apt-get install git-core # En Archlinux $ sudo pacman -S git En Windows 0 MacOSX se utiliza un instalador visual, es decir, que es también muy sencillo. Plataformas En qué plataformas funciona Git? - Linux. Es su platafoma nativa. + Sistemas POSIX. Con ello cualquier variante Unix: BSD, Solaris, Darwin (MacOSX), etc. - Windows. A través de la siguiente implementaci6n: msysGit. Podemos afiadirle opcionalmente una extension de shell que nos permita trabajar con git visualmente: TortoiseGit. Correspondencias con Subversion Git git add git rm git mv git diff git log git status git commit -a git clone git checkout git branch Subversion svn add svn rm svn mv svn diff | less svn log | less svn status syn commit svn checkout svn revert svn copy El indice (staging area El indice de Git es una zona intermedia que almacena los cambios que queremos hacer efectivos en el préximo commit, es decir, una zona a medio camino entre el repositorio local y tu directorio de trabajo. Lo utilizaremos para construir un commit que agrupe modificaciones en varios archivos. Cuando hagamos el commit, se enviaran los cambios que hayamos especificado en el indice, que no tiene por qué coincidir con lo que haya en nuestro directorio de trabajo. El comando que nos muestra la informacién sobre el estado del indice es git status. DO Ejemplo de un ‘git status’ t-in-practice$ Ml S "snapshots" Diferencia fundamental con respecto al _ oh modo de trabajar de otros SCM. Git trabaja 2 almacenando instantaneas de un conjunto de archivos modificados (y planificados a través del indice). Otros sistemas de control de revisiones trabajan a nivel de archivo individual. En cada instantanea los cambios que se mandan al repositorio al hacer el commit son los de aquellos archivos planificados en el indice. Loeal Onerations Flujo de informacién simplificado Directorio de trabajo limpio Un directorio de trabajo limpio es aquel en el que no tenemos ningtin archivo | fed modificado con respecto al ultimo commit, ni tenemos ningun archivo planificado para el proximo commit en el indice. [~/git-puesto-en-practica]$ git status # On branch master nothing to commit (working directory clean) Comandos Inicializar un repositorio s git init. Es el comando que nos permite iniciar el control de versiones sobre un directorio. # Creamos un directorio y un archivo $ mkdir helloworld $ cd hellworld [~/helloworld]$ echo "Hello World" » README Initialized empty Git repository in /home/dave/helloworld/ .git/ Clonar un repositorio Ss git clone. Este comando obtiene una copia local de un repositorio remoto. # Clonamos el repositorio fuente de esta presentacion $ git clone git@github. com: tombatossals/git-puesto-en-practica. git Cloning into 'git-puesto-en-practica’ remote: Counting objects: 49, done remote: Compressing objects: 100% (40/40), done. remote: Total 49 (delta 11), reused 44 (delta 6) Receiving objects: 100% (49/49), 425.79 KiB | 117 KiB/s, done. Resolving deltas: 100% (11/11), done. $ cd git-puesto-en-practica/ [~/git-puesto-en-practica]$ 1s 500.html css first fonts images index.html js README.md El directorio de trabajo es muy limpio, la Unica referencia que veremos al sistema de control de versiones es un directorio git git ubicado en el directorio principal del proyecto. Cosas que os van a llamar la atencion al clonar y trabajar sobre un repositorio Git: - Todo va muy rapido. * Paratener un historico completo del desarrollo, ocupa muy poco todo. - Lamodificaci6n de archivos binarios se gestiona de forma muy eficiente. Operaciones basicas Ss add/rm/mv. Son las operaciones mas basicas sobre archivos en el repositorio respecto al directorio de trabajo. # Afladir un archivo local al repositorio [-/git-puesto-en-practica]$ git add 404.html # Mover un archivo a otro directorio (también renonbrar) [-/git-puesto-en-practica]$ git mv TODO first-steps/ # Borrar un archivo del repositorio y local [-/git-puesto-en-practica]$ git rm hola Obtencion de diferencias Tenemos tres posibles maneras de hacer un diff. git diff. Nos muestra las diferencias de los cambios que todavia no hemos planificado para el proximo commit. git diff -cached. Nos muestra las diferencias de los cambios planificados para el proximo commit con respecto al repositorio. git diff HEAD. Compara el directorio de trabajo y el ultimo commit al repositorio. Ss ors eer reer 1/3 Ejemplo de un ‘git diff’ i -git a/first-steps/index.html b/first-step: Pree errs esceuesio yeeros pee ao)

Git origin/master Updating 7d8ccd7. .9c0a361 Fastforward acerca-de/ index.html | 52 Het trabajando-en-equipo/images/pull.jpg | Bin 0 -> 65507 bytes trabajando-en-equipo/index. html | 66 HH 3 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 acerca-de/index. html Tal vez pull sea un comando "demasiado automatico". git fetch es una alternativa mas controlada, ya que al traerse los cambios del repositorio remoto no los aplica directamente sobre nuestro directorio de trabajo, sino que espera que nosotros lo hagamos manualmente. Despues de un git fetch es conveniente hacer un di comparando las ramas de trabajo local con la del repositorio remoto. Finalmente, si estamos de acuerdo con los cambios, ejecutaremos un merge. Flujo de informacién en Git (simplificado) Yet Bash [fetch |push git push Enviamos todos los cambios que hemos realizados sobre nuestro repositorio local al repositorio/s remoto/s que tengamos definido/s. [-/git-puesto-en-practica]$ git push Counting objects: 10, done Delta compression using up to 2 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 60.16 KiB, done. Total 6 (delta 3), reused 0 (delta 0) To git@github . con: tombatossals/git puesto-en-practica.git 7d8ccd7..9c0a361 master -> master Flujo de informacion en Git (simplificado) \ Teun fous {fetch push fo lU (etal Autenticaci6n Hay un detalle que todavia no hemos comentado. gCémo realiza git la autenticacién de usuarios? Veamoslo. - Protocolos de acceso a un repositorio. - Autenticacion por clave publica/privada. - Hosting de proyectos. Protocolos de acceso Local El acceso local es trivial y sin autenticacién. $ git clone /opt/git/project .git Protocolo GIT Puerto 9418, por red y sin ningun tipo de autenticacién. $ git clone git: //git.kernel .org/pub/scn/git/git.git Protocolos de acceso Protocolo HTTP/HTTPS El més sencillo y compatible para acceso en modo lectura. $ git clone http://example.con/gitproject.git Protocolos de acceso Protocolo SSH Es un acceso por red y autenticado. $ git clone user@server : project. git Se consigue el acceso conjunto de usuarios emparejando un usuario del sistema con una gestidn de claves publicas/privadas SSH. Existe software que ya implementa este funcionamiento, como por ejemplo gitosis o gitolite. enticacion por clave publica/privada El protocolo mas utilizado cuando necesitamos autenticacién es SSH. La autenticacién se realiza mediante clave publica/privada. Veamos un ejemplo de generacién de llaves SSH. $ ssh-keygen Generating public/private rsa key pair Enter file in which to save the key (/Users/schacon/. ssh/id_rsa): Enter passphrase (empty for no passphrase) : Enter same passphrase again: Your identification has been saved in /Users/schacon/ .ssh/id_rsa. Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub The key fingerprint is: 43:¢5:5b:5f:b1:f1:50:43:ad: 20: a6:92:6a:1f :9a:3a schacon@agadorlaptc $ 1s ~/.ssh id_rsa known_hosts config id_rsa. pub enticaci6n por clave publica/privada La clave publica id_rsapub es la que utilizaremos para conseguir acceso a los repositorios. $ cat .ssh/id_rsa.pub ssh-rsa AMAAB3NzaClyc2E AAAADAQABAAABAQDNTQz EK7jgNb5er GMKOO I9bP- EL1Y0ut6ZugXmVrzw1J9pTLS2tpox7gFSUGWwqXRusgpbEpcoBcOKqdXKuVCZb p8YX56+0P071s E5CCMJmTu0 Sc g? z+Pq4 iW8 /MBD3+N+891UPRbXWtggrKdTPM s5bnlpxa7kFdbCEG723ShZI yaRJW20j3+aSxc331+pHiQZ5y jYhSAspJLroaX/ TMKHr FRq2NeP1 FQUOjz1WwkO8ZPDY adkn03dtkVY7/wFR/ /3pq27ckZikFLref2 BWTBCVCe 7ZAQNQHYekN3jq+QBstULMnDMOVgnBueQGLE jApDJhXDQgYPuSA2ZUK OuR8vLNJ dave@inuik Entornos de hosting como github, gitorious o bitbucket solicitan una clave como ésta para hacer push al repositorio. Hosting de proyectos en la nube Github Es la plataforma de hosting de proyectos Git mas utilizada hoy en dia. - Gratuita para proyectos open-source. - Gira en torno al desarrollador y no al proyecto. + Clonado facil de proyectos ya en marcha. - Posibilidad de enviar parches a repositorios remotos via pull-requests. 1/3 Github: pagina de usuario github D Explore Gist Blog Help Promavssis FY X & ©) tombatossals (David Rubert) Tinie ynt_ Ear Pte Se aan 6 o 1 Case de a Pana cere Following 0 coders and watching 15repesitories ew 3! ~ Repositories (6) (EEA Public Activity Coarse) aNd 1 master at tombatosslalgh puestoon Al Repositeries Puke frivate Sauces Forks Merere practice shout on hewr ego (G 22etatet tangs one mat patios @ git puesto-en-oractica Smash O1 At Prasetcin MUL ds icici at @ tomboossas pushed to master a iombolossolevmicronautns day (ea iad aso ic (Gh etsinae xn ce tans tombatossas pushed to master at tombatossalsmicronautas 2 days ose (Hse rion ene aes Hosting de proyectos en un servidor propio Gitolite y GitlabHQ Podemos conseguir algo similar a github en nuestro servidor propio con las ventajas e inconvenientes que eso supone. Simplemente comentaros que necesitais 2 proyectos de software libre: + Gitolite. Software de hosting de proyectos git, que nos proporciona un control de acceso alos repositorios muy detallado. + GitlabHQ. Interfaz web similar a github pero con una licencia MIT, Desarrollado con Ruby on Rails y en continua evolucion. 1/4 http://gitlabhg.com SS aittas Home | etases | log | Coniactus Tt Seft Hosted Git Management BOWNLOAD NOW Getting started instructions: Features

Das könnte Ihnen auch gefallen