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
Se vogliamo aggiungere solo un particolare branch, per esempio il 2.0, dobbiamo aggiunger il flag -b al comando precedente
git submodule add -b 2.0 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
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