itora web

15Oct/110

creare un fork da un plugin su Github e svilupparlo come submodule

Sto sviluppando un'applicazione in CakePhp 2.0 e voglio usare dei plugin che sono ancora fermi alla versione 1.3 di CakePhp. Per ora, rinominare qualche cartella sembra essere sufficiente. Per tenere traccia del lavoro fatto e per far si che qualcun altro possa usufruirne, ho trovato molto utile "git sumbodule". Vediamo come creare un fork da un plugin e svilupparlo in locale come un submodule.
Per prima cosa installiamo la versione 2.0 di cake e inizializzamo un repository git.
Poi andiamo su github e scegliamo il plugin da adattare alla versione 2.0 di Cake, per esempio il plugin categories di CakeDc. Creiamo un fork con il bottone... fork. Poi Andiamo in "Admin", selezioniamo il repository appena forkato e diciamo a github quale deve essere il "default branch", in questo caso, scegliamo il 2.0.
Importante! quando cloniamo o installiamo come submodule un repo da github, questo si porta con appresso tutti i branches. Sta a noi decidere con "git checkout nomebranch" su quale branch lavorare.

Aggiungere il submodule

Dobbiamo dire a git di aggiungere un submodule contenente il codice del nostro fork, per esempio git@github.com:user/categories.git

git submodule add git@github.com:user/categories.git app/Plugin/Categories

Poi spostiamoci nella cartella del plugin appena scaricato e diciamo a git dove e' il repository remote

cd app/Plugin/Categories
git remote add push git@github.com:user/categories.git

Proviamo a modificare un file del plugin, e sempre dalla cartella del plugin, eseguiamo il commit ed il push.

git add .
git commit -m "test commit"
git push master
Aggiungere l'indirizzo remote originario del repo forkato

Automaticamente, la nostra "origin" e' il nostro repo forkato su github, non il repo originario(quello di CakeDC in questo esempio).
Per dire a git di scaricare gli aggiornamenti fatti dagli sviluppatori di cakedc, dobbiamo aggiungere un altro remote.
sempre nella cartella del submodule

git remote add upstream git://github.com/CakeDC/categorie.git
Sincronizzare il nostro submodule con il repo originario forkato

Per scaricare gli aggiornamenti

git fetch upstream

Per fare un merge fra gli aggiornamenti appena scaricati da upstream ed il vostro repo in locale

git merge upstream/master

Per capire la differenza tra "git pull upstream" e "git fetch upstream", consiglio di leggere il punto "Pull in upstream changes" di questa guida.
Qui un link su stackoverflow riguardante questa parte.

Rimuovere submodules

Per rimuovere un submodule erronemente creato:
Delete the relevant line from the .gitmodules file.
Delete the relevant section from .git/config.
Run git rm --cached path_to_submodule (no trailing slash).
via Stackoverflow

Clonare un progetto contenente submodules
git clone git://github.com/user/progettoconsubmodules.git

Questo clonera' il progetto e la cartella del submodule, ma non il contenuto di quest'ultima. Per farlo lanciamo:

git submodule init
git submodule update

Altre info su questa parte nel git pro book

11Oct/110

Jquery screensaver

Uno screensaver stile windows, fatto con jquery.
questo l'html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<style>
body{
	background-color:#b0c4de;
	margin:0px;
	width:100%;
}
#container{
	position: relative;
}
#saver{
	background-color:lime;
	width:100px;
	height:100px;
	position: fixed;
	z-index: 50;
}
</style>
</head>
<body>
	<div id ="container">
		<div id ="saver">I'm a screensaver
		</div>
	</div>
</body>
</html>

Dopo la fine del tag

head

inserite questo codice js

<script>
$(function(){
var savescreen = function(speed, vertical, horizontal){
	$("#saver").animate({left: '+='+horizontal, top: '+='+vertical}, speed);
	$("#saver").animate({left: '-='+horizontal, top: '+='+vertical}, speed);
	$("#saver").animate({left: '-='+horizontal, top: '-='+vertical}, speed);
	$("#saver").animate({left: '+='+horizontal, top: '-='+vertical}, speed);
};

$(function(){
	larg_saver = $('#saver').width();
	alt_saver = $('#saver').height();
	width = $(window).width();
	height = $(window).height();
	margin_top_saver = (height - alt_saver)/2;
	margin_left_saver = (width - larg_saver)/2;
	$('#saver').css('top',0);
	$('#saver').css('left',margin_left_saver);
  });

window.setInterval(function(){
	speed = 1000
	savescreen(speed, margin_top_saver, margin_left_saver);
}, 1000);

});
</script>

Qui una demo per lo screensaver in jquery

Filed under: Uncategorized No Comments
20Sep/110

Git Branches

Per lo sviluppo di un progetto sto utilizzando git in locale con due branches. Un branch master/origin, dove risiede il lavoro pronto per essere caricato in produzione, e uno develop, su cui effettuo i commits, sviluppo nuove featurse, e, quando tutto va bene, implemento nel branch master/origin. Qui sotto un breve tutorial su come cominciare. Diamo per scontato di avere un repo inizializzato, con il branch master/origin. Per creare il nuovo branch 'develop'

git branch develop

per vedere i vari branches

git branch

l'asterisco indica il branch attualmente selezionato
per passare da un branch all'altro

git checkout master
git checkout develop

Per portare avanti il codice su develop, selezioniamo il branch develop

git checkout develop

andiamo avanti con i nostri commit che verranno eseguiti SOLO sul branch develop.
Difatti, se torniamo sul branch master e cerchiamo le modifiche appena fatte, non le troveremo perche' sono solo su develop.
quando le modifiche sono pronte per essere messe nel branch 'master', selezioniamolo
git checkout master
e diciamo al branch master di prendere le modifiche fatte su develop

git merge develop

Una volta che le nuove modifiche sono state implementate, possiamo taggare il branch master con il corrente numero di versione

git tag 0.1

se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo

git branch -d develop

Differenze tra i due branches
Può capitare che alcune modifiche fatte su 'develop' differiscano dal codice presente su master. Puoà darsi che abbiate innavertitamente lavorato su master per delle modifiche che dovevano essere effettuate su develop, o altri scenari simili. Quando, dal branch master lanciamo

git merge develop

Le modifiche fatte su master vengono fuse alle modifiche fatte su develop. Se alcune di queste modifiche riguardano la stessa porzione di codice, al primo commit git ci segnalerà che dobbiamo risolvere un conflitto prima di proseguire.

file_config.txt: needs merge

Apriamo il file incriminato, sistemiamolo e poi git add e git commit.

git add file_config.txt
git commit

Il control-Z dell'ultimo merge
Se avete appena fatto il merge sul branch master di una bizzarra feature che avevate sviluppato su develop, che credevate pronta e superefficiente ma in realtà ha scatenato un turbine di email di protesta da parte degli utenti che rivogliono indietro il loro vecchio sistema, dove "tutto funzionava", dove "tutto era più semplice" e sentite che sta per arrivare la email "si stava meglio quando si stava peggio", beh, allora, forse è meglio tornare indietro, e levare l'ultima feature aggiunta.

git reset --hard ORIG_HEAD

Qui il tutorial completo
Per vedere tutti i commit fatti nei minimi dettagli, installate gitk e lanciatelo da console nella directory dove avete un progetto versionato

Tagged as: , No Comments