<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ORIDOKI</title>
	<atom:link href="http://blog.oridoki.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.oridoki.com</link>
	<description>Web development &#38; e-commerce</description>
	<lastBuildDate>Thu, 26 Jan 2012 14:11:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>PHP 5.4 &#8211; Traits</title>
		<link>http://blog.oridoki.com/blog/2012/01/26/php-5-4-traits/</link>
		<comments>http://blog.oridoki.com/blog/2012/01/26/php-5-4-traits/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 14:11:56 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=526</guid>
		<description><![CDATA[Gracias a &#8216;supu&#8217; por la explicación detallada &#8220;La herencia múltiple tiene un problema de ambigüedad a referenciar a métodos o...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2012/01/26/php-5-4-traits/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Gracias a <strong>&#8216;supu&#8217;</strong> por la explicación detallada  <img src='http://blog.oridoki.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>&#8220;La herencia múltiple tiene un problema de ambigüedad a referenciar a métodos o atributos que se llaman igual en diferentes padres.</p>
<p>Es lo que se hacía antes con una interfaces y patrón representante.</p>
<p>A ver cuando hacen herencia múltiple de verdad&#8230;&#8221;</em></p>
<pre name='code' class='php'>
<?php

// teorica herencia múltiple (suponiendo que sí está soportada por PHP, como en Eiffel)
class A { protected $supu = "A"; }
class B { protected $supu = "B"; }
class C extends A, B {
public function whoIam() {
return A::$supu;
}
public function whoYouAre() {
return B::$supu;
}
}

// herencia múltiple cuando no está directamente soportada
interface I {
public function whoIam();
public function whoYouAre();
}
class A implements I {
private $supu = "A";
public function whoIam() { return $this->supu; }
public function whoYouAre() { return $this->supu; }
}
class B implements I {
private $supu = "B";
public function whoIam() { return $this->supu; }
public function whoYouAre() { return $this->supu; }
}
class C extends A implements I {
private $b_instance = new B();
public function whoYouAre() {
return $this->b_instance->whoYouAre();
}
}

// herencia multiple con el parche de los trait
trait A {
public function whoIam() { return "A"; }
public function whoYouAre() { return "A"; }
}

trait B {
public function whoIam() { return "B"; }
public function whoYouAre() { return "B"; }
}

class C {
use A, B {
A::whoIAm insteadof B;
B::whoYouAre insteadof A;
}
}

?>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2012/01/26/php-5-4-traits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Github: Borrar datos sensibles de nuestro repo</title>
		<link>http://blog.oridoki.com/blog/2011/12/16/github-borrar-datos-sensibles-de-nuestro-repo/</link>
		<comments>http://blog.oridoki.com/blog/2011/12/16/github-borrar-datos-sensibles-de-nuestro-repo/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 22:22:51 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Control de Versiones]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=522</guid>
		<description><![CDATA[A menudo es normal subir accidentalmente datos sensibles al repositorio, por ejemplo usuarios o contraseñas de base de datos. Si...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/12/16/github-borrar-datos-sensibles-de-nuestro-repo/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>A menudo es normal subir accidentalmente datos sensibles al repositorio, por ejemplo usuarios o contraseñas de base de datos.</p>
<p>Si necesitáis borrar esos datos del historial de git podéis hacerlo utilizando el siguiente comando:</p>
<pre>git filter-branch --index-filter 'git rm --cached --ignore-unmatch palabra_clave' HEAD</pre>
<p>Donde palabra_clave son los datos sensibles a borrar.</p>
<p>Espero que os sirva <img src='http://blog.oridoki.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://help.github.com/remove-sensitive-data/">Más Info</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/12/16/github-borrar-datos-sensibles-de-nuestro-repo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git saltos de linea Windows</title>
		<link>http://blog.oridoki.com/blog/2011/11/28/git-saltos-de-linea-windows/</link>
		<comments>http://blog.oridoki.com/blog/2011/11/28/git-saltos-de-linea-windows/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 18:29:38 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Control de Versiones]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=518</guid>
		<description><![CDATA[Cuando estamos integrando código con GIT de varios entornos de desarrollo como windows o unix, es normal que tengamos conflictos...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/11/28/git-saltos-de-linea-windows/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Cuando estamos integrando código con <strong>GIT</strong> de varios entornos de desarrollo como <strong>windows </strong>o <strong>unix</strong>, es normal que tengamos conflictos con los saltos de linea.<br />
<strong> Git </strong>interpreta los saltos de linea de windows como si se hubiera modificado toda la linea entera, lo cual acaba provocando que tengamos que escoger entre un fichero u otro.<br />
Para evitar que <strong>Git </strong>se fije en los<strong> saltos de linea </strong>en los merges, diffs &#8230; Podemos ejecutar el siguiente comando:</p>
<p style="padding-left: 30px;"><strong>git config &#8211;global core.autocrlf input</strong></p>
<p>Espero que os sirva, a mi me ha aliviado bastante las tareas de integración</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/11/28/git-saltos-de-linea-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buscar ficheros codificados sin utf8</title>
		<link>http://blog.oridoki.com/blog/2011/09/08/buscar-ficheros-codificados-sin-utf8/</link>
		<comments>http://blog.oridoki.com/blog/2011/09/08/buscar-ficheros-codificados-sin-utf8/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 16:24:22 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[MiniCodes]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Varios]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=515</guid>
		<description><![CDATA[Cuando trabajas con utf8, en ocasiones si tienes algún fichero mal codificado puede amargarte la tarde, por eso para poder...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/09/08/buscar-ficheros-codificados-sin-utf8/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Cuando trabajas con utf8, en ocasiones si tienes algún fichero mal codificado puede amargarte la tarde, por eso para poder encontrar que ficheros no estan codificados en utf8, podéis utilizar este comando:</p>
<p>find -name &#8220;*.php&#8221; -exec file &#8211;mime-encoding {} \; | grep -v &#8220;: utf-8&#8243; | grep -v &#8220;: us-ascii&#8221; | grep -v &#8220;: binary&#8221; | grep -v &#8220;zf/1.11.4/&#8221;</p>
<p>Si además queréis cambiar la codificación de los mismos podéis hacerlo con este otro:</p>
<p>INCORRECT=`find -name &#8220;*.php&#8221; -exec file -i {} \; | grep -v &#8220;=utf-8&#8243; | grep -v &#8220;=us-ascii&#8221; | grep -v &#8220;=binary&#8221; | grep -v &#8220;zf/1.11.4/&#8221; | cut -d &#8220;:&#8221; -f 1`; for i in $INCORRECT; do iconv &#8211;from-code=ISO-8859-1 &#8211;to-code=UTF-8 $i -o $i.utf8; mv -f $i.utf8 $i; done</p>
<p>Suerte !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/09/08/buscar-ficheros-codificados-sin-utf8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando git para la colaboración</title>
		<link>http://blog.oridoki.com/blog/2011/03/23/usando-git-para-la-colaboracion/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/23/usando-git-para-la-colaboracion/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 07:51:31 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=508</guid>
		<description><![CDATA[Supongamos que Alicia ha empezado un proyecto con un repositorio git en /home/alice/project, y que Bob, que tiene un directorio...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/23/usando-git-para-la-colaboracion/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Supongamos que Alicia ha empezado un proyecto con un repositorio git en /home/alice/project, y que Bob, que tiene un directorio en la home de la misma maquina quiere contribuir.</p>
<p>Bob empieza con</p>
<p>$ git clone /home/alice/project myrepo</p>
<p>Esto le crearía un nuevo directorio llamado ‘myrepo’ que contendría un clon del repositorio de Alicia. El clon es idéntico que el proyecto original, poseyendo su propia copia del historial de cambios.</p>
<p>Bob realiza algunos cambios y hace un commit de los mismos</p>
<p>$ git commit -a</p>
<p>Cuando ha finalizado los cambios, le dice a Alicia que haga un pull del repositorio en /home/bob/myrepo. Ella lo hace con:</p>
<p>$ cd /home/alice/project<br />
$ git pull /home/bob/myrepo</p>
<p>Esto actualizará los cambios de la branch del repositorio de bob Bob denominada ‘master’. Alicia puede solicitar una branch diferente añadiendo el nombre de la branch al final del comando git pull.<br />
Esto hace un merge de los cambios de Bob en su repositorio, ‘git whatchanged’ nos mostrará los nuevos commits. Si Alicia ha realizados sus propios cambios, entonces los cambios de Bob harán un merge con estos, y ella tendrá que hacer un fix para solucionar los conflictos.</p>
<p>Una Alicia más prudente querría examinar los cambios de Bob antes de hacer un pull. Ella podría hacerlo fácilmente creando una branch temporal solo para el propósito de estudiar los cambios de Bob.</p>
<p>$ git fetch /home/bob/myrepo master:bob-incoming</p>
<p>que importa los cambios del master de Bob en una nueva branch denominada bob-incoming (A diferencia de git pull, git fetch solo busca una copia de bob)</p>
<p>(A diferencia del git pull, el git fetch, solo obtiene una copia de la linea de Bob de desarrollo sin hacer la fusión)</p>
<p>Entonces</p>
<p>$ git whatchanged -p master..bob-incoming</p>
<p>nos muestra el listado de todos los cambios realizados por bob desde que empezó su propia branch de la branch de Alicia.<br />
Después de examinar estos cambios, y posiblemente hacer algunos fixes, Alicia puede hacer un pull de los cambios en su master branch.</p>
<p>$ git checkout master<br />
$ git pull . bob-incoming</p>
<p>El último comando es un pull desde l abranch de  &#8220;bob-incoming&#8221;  en el repositorio de Alicia.<br />
Más tarde,  Bob podrá actualizar su repositorio con los últimos cambios de Alicia, utilizando</p>
<p>$ git pull</p>
<p>Ten en cuenta que el no necesita tener el path del repositorio de Alicia, cuando bob clono el repositorio de Alicia, git almacenó la localización de su repositorio en el fichero .git/remotes/origin, y esta localización fué utilizada por defecto en los pulls</p>
<p>Bob también se dará cuenta que se ha creado una nueva branch en su directorio que el no creo:</p>
<p>$ git branch<br />
* master<br />
  origin</p>
<p>La origin branch, que fué creada automáticamente por el ‘git clone’, es una copia de la master branch de Alicia, Bob nunca podrá hacer un commit de ella.</p>
<p>Si Bob decidiera trabajar desde un nuevo host, el podría hacer clones y pulls utilizando el protocolo ssh</p>
<p>$ git clone alice.org:/home/alice/project myrepo</p>
<p>Alternativamente, git tiene un protocolo nativo, o puede utilizar rsync o http.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/23/usando-git-para-la-colaboracion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial GIT: Utilizando branches</title>
		<link>http://blog.oridoki.com/blog/2011/03/22/tutorial-git-utilizando-branches/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/22/tutorial-git-utilizando-branches/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:58:54 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=506</guid>
		<description><![CDATA[Un repositorio simple de git puede mantener diferentes branches de desarrollo. Para crear una nueva branch llamada ‘experimental’, utilizaremos $...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/22/tutorial-git-utilizando-branches/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Un repositorio simple de git puede mantener diferentes branches de desarrollo. Para crear una nueva branch llamada ‘experimental’, utilizaremos</p>
<p>$ git branch experimental</p>
<p>Si ahora ejecutamos</p>
<p>$ git branch</p>
<p>tendremos un listado de las branches existentes actualmente:</p>
<p> experimental<br />
* master</p>
<p>La branch experimental es la única creada, y la branch ‘master’ es la branch por defecto que se crea automaticamente. El asterisco marca la branch como la activa.<br />
Para marcar ‘experimental’ como activa utilizaremos el siguiente comando</p>
<p>$ git checkout experimental</p>
<p>Editemos un fichero y volvamos a la master branch.</p>
<p>$ git commit -a<br />
$ git checkout master</p>
<p>Ahora podemos observar que el cambio que hicimos ya no es visible, puesto que este se realizó sobre la ‘branch experimental’ y ahora estamos en la master.</p>
<p>Podemos realizar varios cambios en la master y si listamos los cambios</p>
<p>$ git commit -a</p>
<p>vemos como las dos branches han diverjido, con diferentes cambios realizados en cada una de ellos. Para hacer un merge de los cambios hechos en las dos ramas, ejecutamos:</p>
<p>$ git pull . experimental</p>
<p>Si los cambios no generan conflictos, perfecto. Si hay conflictos los marcadores, se quedarán guardados en los ficheros problemáticos. Para mostrar los datos de los conflictos</p>
<p>$ git diff</p>
<p>Mostrará dichos marcadores hasta que se resuelvan los conflictos,</p>
<p>$ git commit -a</p>
<p>hará un commit del resultado del merge, y finalmente</p>
<p>$ gitk</p>
<p>Mostrará una representación grafica de el historial resultante.<br />
Si necesitamos eliminar una branch, podemos hacerlo con:</p>
<p>$ git branch -D crazy-idea</p>
<p>Las branches son simples y fáciles, así que son ideales para hacer pruebas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/22/tutorial-git-utilizando-branches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento importar categorías</title>
		<link>http://blog.oridoki.com/blog/2011/03/22/magento-importar-categorias/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/22/magento-importar-categorias/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:52:37 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=503</guid>
		<description><![CDATA[Cuando empezamos un proyecto con Magento, lo más tedioso quizá es introducir los datos en la aplicación. Para la importación...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/22/magento-importar-categorias/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Cuando empezamos un proyecto con Magento, lo más tedioso quizá es introducir los datos en la aplicación. Para la importación de productos existen herramientas integradas en Magento que desarrollan esta función.</p>
<p>Sin embargo las categorías no, vamos a ver un pequeño script que nos importará las categorías en base a una cadena json o un array php.</p>
<p>En la raíz de la instalación magento creamos un fichero e introducimos el siguiente código.</p>
<pre name='code' class='php'>
// initialize magento environment for 'default' store
require_once 'app/Mage.php';
Mage::app('default');

// Get the data from a JSON font
$json = '[{"name":"T Shirts","subcats":[{"name":"Black"},{"name":"White"},{"name":"Orange"},{"name":"Yellow"}]},{"name":"Jeans","subcats":[{"name":"Shorts","subcats":[{"name":"Black"},{"name":"White"},{"name":"Orange"},{"name":"Yellow"}]},{"name":"Larges","subcats":[{"name":"Black"},{"name":"White"},{"name":"Orange"},{"name":"Yellow"}]}]}]';

// Translate it into an associative array
$cat = json_decode($json, true);

/*
     $cat = array(

        array(
            'name' => 'T Shirts',
            'subcats' => array(
                array('name' => 'Black'),
                array('name' => 'White'),
                array('name' => 'Orange'),
                array('name' => 'Yellow')
            )
        ),
        array(
            'name' => 'Jeans',
            'subcats' => array(
                array(
                    'name' => 'Shorts',
                    'subcats' => array(
                        array('name' => 'Black'),
                        array('name' => 'White'),
                        array('name' => 'Orange'),
                        array('name' => 'Yellow')
                    )
                ),
                array(
                    'name' => 'Larges',
                    'subcats' => array(
                        array('name' => 'Black'),
                        array('name' => 'White'),
                        array('name' => 'Orange'),
                        array('name' => 'Yellow')
                    )
                )
            )
        )
    );
*/

// Foreach first level category begin the recursive process
for($i=0; $i<count($cat); $i++) {
    addCategory($cat[$i]);
}

function addCategory($cat) {

    //get a new category object
    $category = Mage::getModel('catalog/category');
    $category->setStoreId(0); //default/all

    if($cat['path']) {
        $parent = $cat['path'];
    } else {
        $parent = '1/2';
        $cat['parent_id'] = 0;
    }

    $category->addData(array(
        'name'              =>  $cat['name'],
        'path'              => $parent,
        'description'       => '',
        'meta_title'        => '',
        'meta_description'  => '',
        'landing_page'      => '',
        'display_mode'      => 'PRODUCTS',
        'is_active'         => 1,
        'is_anchor'         => 0,
        'url_key'           => ''
    ));

    try {

      // Saving the data
      $category->save();

      // Getting the inserted ID
      $catID = $category->getId();

      // Foreach subcategory insert into db
      for($i=0; $i<count($cat['subcats']); $i++) {

          $cat['subcats'][$i]['parent_id'] = $catID;
          $cat['subcats'][$i]['path'] = $parent . '/' . $catID;
          addCategory($cat['subcats'][$i]);

      }

    } catch (Exception $e) {

        echo $e->getMessage();

    }

}
</pre>
<p>Ahora simplemente ejecutamos el código a través de linea de comandos y ya tenemos creado nuestro árbol de categorías.</p>
<p>Note: Si no queréis importarlo desde json y preferís crear un array php pues descomentáis el trozo comentado y listos.</p>
<p>Espero que os sea útil!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/22/magento-importar-categorias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento: Borrar el contenido de un bloque desde el controlador</title>
		<link>http://blog.oridoki.com/blog/2011/03/22/magento-borrar-el-contenido-de-un-bloque-desde-el-controlador/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/22/magento-borrar-el-contenido-de-un-bloque-desde-el-controlador/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 08:05:23 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=500</guid>
		<description><![CDATA[Cuando creamos blocks dinámicamente desde el controlador, es posible que necesitemos eliminar el contenido de algún bloque por defecto del...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/22/magento-borrar-el-contenido-de-un-bloque-desde-el-controlador/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Cuando creamos blocks dinámicamente desde el controlador, es posible que necesitemos eliminar el contenido de algún bloque por defecto del layout. </p>
<p>Por ejemplo tenemos el código</p>
<pre name='code' class='php'>
    public function indexAction() {

        $this->loadLayout();

        $block = $this->getLayout()->createBlock(
        'Mage_Core_Block_Template',
        'my_block_name_here',
        array('template' => 'activecodeline/developer.phtml')
        );

        $this->getLayout()->getBlock('content')->append($block);

        $this->renderLayout();
    }
</pre>
<p>(Si quieres más info de como crear bloques desde el controlador aqui tienes un buen ejemplo)</p>
<p>Si por ejemplo necesitamos eliminar todos los hijos del bloque de la derecha podríamos ejecutar algo como esto.</p>
<pre name='code' class='php'>

     $this->getLayout()->getBlock('right')->unsetChildren();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/22/magento-borrar-el-contenido-de-un-bloque-desde-el-controlador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GIT: Importando un proyecto nuevo</title>
		<link>http://blog.oridoki.com/blog/2011/03/21/git-importando-un-proyecto-nuevo/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/21/git-importando-un-proyecto-nuevo/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 10:33:20 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Control de Versiones]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=497</guid>
		<description><![CDATA[Asumiendo que tenemos tarball project.tar.gz con nuestro trabajo inicial. Podemos situarlo bajo el control de versiones de git como sigue...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/21/git-importando-un-proyecto-nuevo/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Asumiendo que tenemos tarball project.tar.gz con nuestro trabajo inicial. Podemos situarlo bajo el control de versiones de git como sigue a continuación.</p>
<p>$ tar xzf project.tar.gz<br />
$ cd project<br />
$ git init-db</p>
<p>Git contestará incumpliendo la zona de almacenamiento local.</p>
<p>Ahora que hemos inicializado el directorio de trabajo (Puedes ver un nuevo directorio llamado ‘.git’). Digámosle a git que haga un seguimiento de todos los ficheros en ese directorio.</p>
<p>$ git add .</p>
<p>Finalmente,</p>
<p>$ git commit -a</p>
<p>nos preguntará si queremos hacer un commit, y luego guardará todos los ficheros en el repositorio.<br />
Probaremos modificando algunos ficheros, y luego ejecutamos</p>
<p>$ git diff</p>
<p>para ver los cambios. Cuando ejecutemos</p>
<p>$ git commit -a</p>
<p>nos mostrará otra vez un mensaje describiendo el cambio, y luego grabará las nuevas versiones de los ficheros modificados.</p>
<p>Una nota sobre los mensajes del commit. Aunque no es obligatorio, es una buena idea empezar el mensaje de commit con una linea simple y corta (menos de 50 caracteres) resumiendo los cambios, segiodo por una linea en blanco y luego el resto de descripción. Las herramientas que convierten los commits en email, por ejemplo, utiliza la primera linea para el ‘subject’ y el resto para el ‘body’.</p>
<p>Para añadir un nuevo fichero, primero crea un fichero, y luego</p>
<p>$ git add path/to/new/file</p>
<p>luego hacemos un commit normal. Ningún comando especial es necesario para borrar un fichero, solo lo borramos y luego hacemos un commit.</p>
<p>En este punto podemos ver el historial de cambios utilizando</p>
<p>$ git whatchanged</p>
<p>Si también queremos ver diffs completos en cada paso, utilzaremos</p>
<p>$ git whatchanged -p</p>
<h2>Utilizando branches</h2>
<p>Un repositorio simple de git puede mantener diferentes branches de desarrollo. Para crear una nueva branch llamada ‘experimental’, utilizaremos</p>
<p>$ git branch experimental</p>
<p>Si ahora ejecutamos</p>
<p>$ git branch</p>
<p>tendremos un listado de las branches existentes actualmente:</p>
<p>experimental<br />
* master</p>
<p>La branch experimental es la única creada, y la branch ‘master’ es la branch por defecto que se crea automaticamente. El asterisco marca la branch como la activa.<br />
Para marcar ‘experimental’ como activa utilizaremos el siguiente comando</p>
<p>$ git checkout experimental</p>
<p>Editemos un fichero y volvamos a la master branch.</p>
<p>$ git commit -a<br />
$ git checkout master</p>
<p>Ahora podemos observar que el cambio que hicimos ya no es visible, puesto que este se realizó sobre la ‘branch experimental’ y ahora estamos en la master.</p>
<p>Podemos realizar varios cambios en la master y si listamos los cambios</p>
<p>$ git commit -a</p>
<p>vemos como las dos branches han diverjido, con diferentes cambios realizados en cada una de ellos. Para hacer un merge de los cambios hechos en las dos ramas, ejecutamos:</p>
<p>$ git pull . experimental</p>
<p>Si los cambios no generan conflictos, perfecto. Si hay conflictos los marcadores, se quedarán guardados en los ficheros problemáticos. Para mostrar los datos de los conflictos</p>
<p>$ git diff</p>
<p>Mostrará dichos marcadores hasta que se resuelvan los conflictos,</p>
<p>$ git commit -a</p>
<p>hará un commit del resultado del merge, y finalmente</p>
<p>$ gitk</p>
<p>Mostrará una representación grafica de el historial resultante.<br />
Si necesitamos eliminar una branch, podemos hacerlo con:</p>
<p>$ git branch -D crazy-idea</p>
<p>Las branches son simples y fáciles, así que son ideales para hacer pruebas.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/21/git-importando-un-proyecto-nuevo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial GIT</title>
		<link>http://blog.oridoki.com/blog/2011/03/21/tutorial-git/</link>
		<comments>http://blog.oridoki.com/blog/2011/03/21/tutorial-git/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 10:32:25 +0000</pubDate>
		<dc:creator>Adrià Cidre</dc:creator>
				<category><![CDATA[Control de Versiones]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://blog.oridoki.com/?p=495</guid>
		<description><![CDATA[Este tutorial explica como importar nuevos proyectos a git, hacer cambios en ellos y compartir cambios con otros desarroladores. Lo...<br /><a class="more-link" href="http://blog.oridoki.com/blog/2011/03/21/tutorial-git/">Read More</a>]]></description>
			<content:encoded><![CDATA[<p>Este tutorial explica como importar nuevos proyectos a git, hacer cambios en ellos y compartir cambios con otros desarroladores.</p>
<p>Lo primero que tenemos que saber es que en cualquier momento podemos tener acceso a la documentación de git con el comando:</p>
<p>$ man git-diff</p>
<p>La fuente en inglés del tutorial la encontraréis en : <a href="http://www.kernel.org/pub/software/scm/git/docs/v1.2.6/tutorial.html">http://www.kernel.org/pub/software/scm/git/docs/v1.2.6/tutorial.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.oridoki.com/blog/2011/03/21/tutorial-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

