<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://mediawiki.a-eskwadraat.nl/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://mediawiki.a-eskwadraat.nl/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daanr</id>
		<title>A-Eskwiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://mediawiki.a-eskwadraat.nl/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daanr"/>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Special:Contributions/Daanr"/>
		<updated>2026-08-10T23:05:31Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.2</generator>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:34:08Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je de code van de website binnenhalen en je eigen debugomgeving aanmaken. Dit doe je door de volgende commando's in een terminal te draaien:&lt;br /&gt;
&lt;br /&gt;
(Weet je niet hoe je een 'terminal' moet openen? Vraag een medewebcieër!)&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=DEBUGNAAM-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;DEBUGNAAM&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
&lt;br /&gt;
Dit zorgt ervoor dat de code die in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt; staat wordt uitgevoerd wanneer je naar &amp;lt;code&amp;gt;DEBUGNAAM-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt; gaat in je browser.&lt;br /&gt;
&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je de code van de website binnenhalen en je eigen debugomgeving aanmaken. Dit doe je door de volgende commando's in een terminal te draaien:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=DEBUGNAAM-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;DEBUGNAAM&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
(Weet je niet hoe je een 'terminal' moet openen? Vraag een medewebcieër!)&lt;br /&gt;
&lt;br /&gt;
Dit zorgt ervoor dat de code die in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt; staat wordt uitgevoerd wanneer je naar &amp;lt;code&amp;gt;DEBUGNAAM-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt; gaat in je browser.&lt;br /&gt;
&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:31:57Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je de code van de website binnenhalen en je eigen debugomgeving aanmaken:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=DEBUGNAAM-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;DEBUGNAAM&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
&lt;br /&gt;
Dit zorgt ervoor dat de code die in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt; staat wordt uitgevoerd wanneer je naar &amp;lt;code&amp;gt;DEBUGNAAM-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt; gaat in je browser.&lt;br /&gt;
&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je de code van de website binnenhalen en je eigen debugomgeving aanmaken:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=DEBUGNAAM-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;DEBUGNAAM&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
&lt;br /&gt;
Dit zorgt ervoor dat de code die in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt; staat wordt uitgevoerd wanneer je naar &amp;lt;code&amp;gt;$bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt; gaat in je browser.&lt;br /&gt;
&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:30:39Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je de code van de website binnenhalen en je eigen debugomgeving aanmaken:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=$bla-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;$bla&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
&lt;br /&gt;
Dit zorgt ervoor dat de code die in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt; staat wordt uitgevoerd wanneer je naar &amp;lt;code&amp;gt;$bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt; gaat in je browser.&lt;br /&gt;
&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:29:00Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je je eigen debugomgeving aanmaken:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=$bla-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;$bla&amp;lt;/code&amp;gt; vervangen met de naam van je debugomgeving, bijvoorbeeld 'pepernoot' of 'comint'.)&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid</id>
		<title>Nieuw WWW-lid</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Nieuw_WWW-lid"/>
				<updated>2018-10-05T18:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Nieuw lid */ wwwdebug -&amp;gt; wwwdebug2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wat je moet doen voor een nieuw lid van de [[WebCie|www]]:&lt;br /&gt;
&lt;br /&gt;
== Bestuur ==&lt;br /&gt;
&lt;br /&gt;
#Toevoegen aan 'webcie' (inloggen op de server en bij de repo)&lt;br /&gt;
&lt;br /&gt;
== Webcie ==&lt;br /&gt;
&lt;br /&gt;
Ga naar de [[vm-www-debug]] en log in als user webcie:&lt;br /&gt;
 ssh vm-www-debug&lt;br /&gt;
 sudo -i -u webcie&lt;br /&gt;
&lt;br /&gt;
Toevoegen aan de htpasswd:&lt;br /&gt;
 htpasswd /srv/htpasswd $USER&lt;br /&gt;
Toevoegen aan de htgroups&lt;br /&gt;
 vim /srv/config/vm-www-debug/httpd/conf.d/htgroups&lt;br /&gt;
 vim /srv/config/vm-www/httpd/conf.d/htgroups&lt;br /&gt;
Toevoegen aan de wwwdebug.conf&lt;br /&gt;
 cd /srv/http/www/git&lt;br /&gt;
 vim webcie_leden.sh&lt;br /&gt;
 ./webcie_leden.sh&lt;br /&gt;
 git add -p&lt;br /&gt;
 git commit&lt;br /&gt;
 git push&lt;br /&gt;
 sudo service httpd restart&lt;br /&gt;
Toevoegen aan de git repo&lt;br /&gt;
 Vraag aan een momenteel webcie lid om dit te doen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nieuw lid ==&lt;br /&gt;
&lt;br /&gt;
Als eerste ga je je eigen debug omgeving aanmaken:&lt;br /&gt;
&lt;br /&gt;
 cd /mnt/wwwdebug2&lt;br /&gt;
 mkdir $USER/&lt;br /&gt;
 cd $USER&lt;br /&gt;
 git clone https://git.a-eskwadraat.nl/webcie/website.git wwwdebug&lt;br /&gt;
 cd wwwdebug/www&lt;br /&gt;
 ./manage build --enable-debug --hostname=$bla-debug.a-eskwadraat.nl&lt;br /&gt;
 ln -s /mnt/wwwdebug2/$USER/wwwdebug/ ~/wwwdebug&lt;br /&gt;
&lt;br /&gt;
(Hier moet je &amp;lt;code&amp;gt;$bla&amp;lt;/code&amp;gt; vervangen met de naam van je debugwebsite.)&lt;br /&gt;
=== Je eerste commit doen ===&lt;br /&gt;
&lt;br /&gt;
In de root van je website (dat is de map ~/wwwdebug/www/ dus doe als je daar nog niet in zit &amp;lt;code&amp;gt;cd ~/wwwdebug/www/&amp;lt;/code&amp;gt;) staat de map space/auth/ met daarin het bestand init.php. Voeg jezelf hier toe bij de $GODNRS. Om dit bestand vervolgens te committen doe je&lt;br /&gt;
 git commit space/auth/init.php&lt;br /&gt;
Vervolgens moet je het bestand pushen zodat de rest van de webcieërs het binnen kunnen halen&lt;br /&gt;
 git push&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2018-01-23T00:47:20Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Doetjes &amp;amp; Doe-nietjes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Pull Requests ==&lt;br /&gt;
&lt;br /&gt;
Als je een branch wil mergen, doe dit dan altijd via een pull request. Dan kunnen andere WebCie'rs ook de code checken op bugs of stijlfouten.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
;refactor-$bla&lt;br /&gt;
: Als je meer in het algemeen wilt refactoren, kan je daarvoor ook het beste een aparte branch maken, zodat er niet teveel ruis op &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; is en zodat je er een pull request van kan maken.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git blame&amp;lt;/code&amp;gt; wat moeilijker gaan, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld&lt;br /&gt;
* '''Doe''': als een feature branch waar je mee bezig bent nogal achterloopt op develop, kan je die rebasen op develop (en vervolgens force-pushen), ''mits'' je de enige bent die een lokale checkout van die branch heeft. Nadruk op mits.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2018-01-15T18:45:22Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Doetjes &amp;amp; Doe-nietjes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Pull Requests ==&lt;br /&gt;
&lt;br /&gt;
Als je een branch wil mergen, doe dit dan altijd via een pull request. Dan kunnen andere WebCie'rs ook de code checken op bugs of stijlfouten.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
;refactor-$bla&lt;br /&gt;
: Als je meer in het algemeen wilt refactoren, kan je daarvoor ook het beste een aparte branch maken, zodat er niet teveel ruis op &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; is en zodat je er een pull request van kan maken.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git blame&amp;lt;/code&amp;gt; wat moeilijker gaan, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld&lt;br /&gt;
* '''Doe''': als een feature branch waar je mee bezig bent nogal achterloopt op develop, kan je die rebasen op develop (en vervolgens force-pushen), ''mits'' je de enige bent die een lokale checkout van die branch heeft.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2018-01-15T18:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Pull Requests ==&lt;br /&gt;
&lt;br /&gt;
Als je een branch wil mergen, doe dit dan altijd via een pull request. Dan kunnen andere WebCie'rs ook de code checken op bugs of stijlfouten.&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
;refactor-$bla&lt;br /&gt;
: Als je meer in het algemeen wilt refactoren, kan je daarvoor ook het beste een aparte branch maken, zodat er niet teveel ruis op &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; is en zodat je er een pull request van kan maken.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git blame&amp;lt;/code&amp;gt; wat moeilijker gaan, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2018-01-15T18:40:53Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
;refactor-$bla&lt;br /&gt;
: Als je meer in het algemeen wilt refactoren, kan je daarvoor ook het beste een aparte branch maken, zodat er niet teveel ruis op &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt; is en zodat je er een pull request van kan maken.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git blame&amp;lt;/code&amp;gt; wat moeilijker gaan, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2018-01-15T18:38:36Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Doetjes &amp;amp; Doe-nietjes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git blame&amp;lt;/code&amp;gt; wat moeilijker gaan, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Talk:Codestijl</id>
		<title>Talk:Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Talk:Codestijl"/>
				<updated>2018-01-14T16:57:10Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Created page with &amp;quot;== Witregel voor &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; ==  : Openingshaakjes van blokken zijn verplicht en komen op de regel eronder. (Dus &amp;lt;code&amp;gt;→ if (...)\n→ {\n→ → ...&amp;lt;/code&amp;gt;)  Weet niet z...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Witregel voor &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
: Openingshaakjes van blokken zijn verplicht en komen op de regel eronder. (Dus &amp;lt;code&amp;gt;→ if (...)\n→ {\n→ → ...&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Weet niet zeker of ik 't hier mee eens ben; is dit de gangbare stijl in PHP-land? -- [[User:Daanr|Daanr]] ([[User talk:Daanr|talk]]) 17:57, 14 January 2018 (CET)&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl</id>
		<title>Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl"/>
				<updated>2018-01-14T16:52:45Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Iets duidelijker verwoorden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat we nog genoeg fietsenstallingen hebben, hebben we hier een korte opsomming van wat we mooie stijl vinden.&lt;br /&gt;
&lt;br /&gt;
* Indentatie is een tab, en doorgaan van regels is twee tabs.&lt;br /&gt;
* Regels langer dan 80 karakters zijn lelijk maar niet verboden. Dus, wees niet bang om statements en expressies over meerdere regels te verdelen.&lt;br /&gt;
* Na een blok (functiedefinities, &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;foreach&amp;lt;/code&amp;gt; etc.) komt precies één witregel.&lt;br /&gt;
* Openingshaakjes van blokken zijn verplicht en komen op de regel eronder. (Dus &amp;lt;code&amp;gt;→ if (...)\n→ {\n→ → ...&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Klassen zijn UpperCamelCase en functies, variabelen enzo zijn lowerCamelCase.&lt;br /&gt;
* Heb je een afkorting zoals CSV, dan doen we CamelCase nog steeds met hoofdletters: &amp;lt;code&amp;gt;CSVPagina&amp;lt;/code&amp;gt;, niet &amp;lt;code&amp;gt;CsvPagina&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Code is Nederlandstalig, dus gebruik Nederlandse woorden. Ga hierin ook weer niet te ver: &amp;lt;code&amp;gt;BlaView::tabel()&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;BlaView::table()&amp;lt;/code&amp;gt; maar &amp;lt;code&amp;gt;BlaView&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;BlaBlik&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Doxygen-commando's zijn met @: &amp;lt;code&amp;gt;@brief&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@param&amp;lt;/code&amp;gt; bla, &amp;lt;code&amp;gt;@returns&amp;lt;/code&amp;gt;, enz.&lt;br /&gt;
* De &amp;lt;code&amp;gt;HTMLPage&amp;lt;/code&amp;gt; maak je aan in de controller, de view returnt &amp;lt;code&amp;gt;HTMLObject&amp;lt;/code&amp;gt;en die je erin kan stoppen.&lt;br /&gt;
* Als je wilt je checken of iets &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is, gebruik dan altijd &amp;lt;code&amp;gt;is_null()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Gebruik [[Responses]] ipv stateful functies.&lt;br /&gt;
* Gebruik &amp;lt;code&amp;gt;new $blaPage()&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;Page::getInstance('$bla')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vul je andere favoriete pet peeves hier in!&lt;br /&gt;
&lt;br /&gt;
Als je met (bestaande) code bezig bent die zich niet helemaal houdt aan deze stijl, fix dat dan (minstens in de methode waar het om gaat).&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-07T12:31:46Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Daan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= [[User:Daanr|Daan]] =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op lexicografische volgorde van 'realistisch, belangrijk' naar 'P = NP, niet zo belangrijk'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Zorg dat de PromoCie weer toegang heeft tot de vertaalstrings op de een of andere manier&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gebruik Dia niet meer als model-definitie format, want het is echt niet chill voor version control.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om URL parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Meer DevOps dingen, makkelijker je eigen developer env en de production env draaien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N want dat is ''web scale''&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
= [[User:Timb|Timb]] =&lt;br /&gt;
&lt;br /&gt;
* Een fijn (unit)testsysteem. (werk ik aan!)&lt;br /&gt;
* De meeste functies zijn zo goed als puur, en de functies die niet puur zijn komen niet in een View voor.&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Continuous integration.&lt;br /&gt;
* 100 % code coverage.&lt;br /&gt;
* Decorator-achtige constructies voor requireAuth enzo.&lt;br /&gt;
* dia2php poept volautomatisch een hele CRUD-app uit.&lt;br /&gt;
* Herschrijf de website in Swail, de toffe Haskell-en-Python-hadden-een-baby programmeertaal die je helpt te zeggen wat je bedoelt (en die syntactische whitespace heeft!).&lt;br /&gt;
* Volledig automatisch je testomgeving maken.&lt;br /&gt;
* Een formeel bewijs dat de website featurecompleet is.&lt;br /&gt;
* Onze eis is niets meer, maar kan ook niets minder zijn, dan het Goede Leven voor elk persoon.&lt;br /&gt;
* Bewijs dat P =/= NP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-07T12:30:53Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Daan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= [[User:Daanr|Daan]] =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op lexicografische volgorde van 'realistisch, belangrijk' naar 'P = NP, niet zo belangrijk'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Zorg dat de PromoCie weer toegang heeft tot de vertaalstrings op de een of andere manier&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om URL parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Meer DevOps dingen, makkelijker je eigen developer env en de production env draaien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N want dat is ''web scale''&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
= [[User:Timb|Timb]] =&lt;br /&gt;
&lt;br /&gt;
* Een fijn (unit)testsysteem. (werk ik aan!)&lt;br /&gt;
* De meeste functies zijn zo goed als puur, en de functies die niet puur zijn komen niet in een View voor.&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Continuous integration.&lt;br /&gt;
* 100 % code coverage.&lt;br /&gt;
* Decorator-achtige constructies voor requireAuth enzo.&lt;br /&gt;
* dia2php poept volautomatisch een hele CRUD-app uit.&lt;br /&gt;
* Herschrijf de website in Swail, de toffe Haskell-en-Python-hadden-een-baby programmeertaal die je helpt te zeggen wat je bedoelt (en die syntactische whitespace heeft!).&lt;br /&gt;
* Volledig automatisch je testomgeving maken.&lt;br /&gt;
* Een formeel bewijs dat de website featurecompleet is.&lt;br /&gt;
* Onze eis is niets meer, maar kan ook niets minder zijn, dan het Goede Leven voor elk persoon.&lt;br /&gt;
* Bewijs dat P =/= NP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-05T00:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= [[User:Daanr|Daan]] =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om URL parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Meer DevOps dingen, makkelijker je eigen developer env en de production env draaien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
= [[User:Timb|Timb]] =&lt;br /&gt;
&lt;br /&gt;
* Een fijn (unit)testsysteem. (werk ik aan!)&lt;br /&gt;
* De meeste functies zijn zo goed als puur, en de functies die niet puur zijn komen niet in een View voor.&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Continuous integration.&lt;br /&gt;
* 100 % code coverage.&lt;br /&gt;
* Decorator-achtige constructies voor requireAuth enzo.&lt;br /&gt;
* dia2php poept volautomatisch een hele CRUD-app uit.&lt;br /&gt;
* Herschrijf de website in Swail, de toffe Haskell-en-Python-hadden-een-baby programmeertaal die je helpt te zeggen wat je bedoelt (en die syntactische whitespace heeft!).&lt;br /&gt;
* Volledig automatisch je testomgeving maken.&lt;br /&gt;
* Een formeel bewijs dat de website featurecompleet is.&lt;br /&gt;
* Onze eis is niets meer, maar kan ook niets minder zijn, dan het Goede Leven voor elk persoon.&lt;br /&gt;
* Bewijs dat P =/= NP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:58:37Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= [[User:Daanr|Daan]] =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om URL parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:57:51Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Daan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om URL parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:57:26Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Gooi FotoWeb weg ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om HTTP parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:56:34Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Daan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om HTTP parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:55:59Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in, of doen met, de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om HTTP parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:55:33Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in/doen met de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Test meer dingen. (Wordt aan gewerkt.)&lt;br /&gt;
* Maak Benamite/WhosWho4 chiller om te gebruiken. Vooral op het gebied van routing. Bijvoorbeeld dat je expliciet in een controllerfunctie kan zeggen wat voor parameters erin je parameters moeten. Zie: Flask.&lt;br /&gt;
* Test controllerfuncties á la QuickCheck. Dus dan moet je een manier vinden om HTTP parameters te... parameteriseren. En geen idee of een QuickCheck-achtige library voor PHP bestaat, en zo nee, hoe die eruit zou moeten zien.&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die (REST) API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met bovenstaand item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Wishlist"/>
				<updated>2017-12-04T23:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Created page with &amp;quot;Hier kan je dingen neerzetten die je graag zou zien in/doen met de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier kan je dingen neerzetten die je graag zou zien in/doen met de code of website. Dit kunnen dan een soort persoonlijke TODO's of ideëen zijn, of iets wat meer is van het niveau &amp;quot;herschrijf alles in Idris&amp;quot;, i.e. lulz.&lt;br /&gt;
&lt;br /&gt;
= Daan =&lt;br /&gt;
&lt;br /&gt;
Ongeveer op volgorde van 'realistisch' naar 'P = NP'.&lt;br /&gt;
&lt;br /&gt;
* Upgrade naar PHP 7.&lt;br /&gt;
* Upgrade naar PostgreSQL.&lt;br /&gt;
* Maak de dia2php netter, i.e. minder met teringlange strings met allemaal tabs erin. Iets met een expliciete AST en quasiquoting ofzo.&lt;br /&gt;
* Maak alles een tikje meer microservice-achtig, door ledenbeheer e.d. in een kern-API te stoppen, en dan 'apps' op basis van die API te implementeren. Gevolg hiervan is dat je dan ook andere talen dan PHP kan gebruiken, zonder dat je alles hoeft te herschrijven!&lt;br /&gt;
* Waarschijnlijk samen met de vorige item: doe leuke &amp;amp; fijne frontend dingen met Elm/PureScript/TypeScript/WebAssembly.&lt;br /&gt;
* C O N T A I N E R I Z A T I O N&lt;br /&gt;
* Herschrijf de website in de toffe Haskell-en-Python-hadden-een-baby taal die [[User:Timb|Tim]] ooit gaat maken.&lt;br /&gt;
* Bewijs dat P = NP.&lt;br /&gt;
* Verander PHP in een goede taal.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Docu_Todo_(WebCie)</id>
		<title>Docu Todo (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Docu_Todo_(WebCie)"/>
				<updated>2017-12-04T23:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie Docu Todo to Docu Todo (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;De volgende onderwerpen mogen nog wel eens gedocumenteerd worden:&lt;br /&gt;
&lt;br /&gt;
== Voor de WebCie zelf ==&lt;br /&gt;
&lt;br /&gt;
* [[Dia en generated code]] (wat is dia, hoe bewerk ik het, wat te doen bij merge conflicts?)&lt;br /&gt;
* [[Generator aanpassen]] (stel dat ik niet tevreden ben met de manier waarop de generator werkt, hoe pas ik dat aan?)&lt;br /&gt;
* [[Ingewerkt WebCie-lid]] (ik ben zojuist door de inwerking gekomen, wat nu?)&lt;br /&gt;
* [[Scripts_(WebCie)]] (wat doen de verscheidene scripts?)&lt;br /&gt;
* [[Antieke code aanpassen]] (bookweb moet anders, wat nu?)&lt;br /&gt;
* [[Noodgevallen WebCie]] (poep is op de fik, wat nu?)&lt;br /&gt;
* [[Checklist voor werkavonden]] (heb je al eens geupt? hoe staat het met je overleg? zijn je libraries nog up to date? is de hoeveelheid nicolas cages adequaat?)&lt;br /&gt;
&lt;br /&gt;
== Voor de &amp;quot;gewone&amp;quot; gebruikers ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.a-eskwadraat.nl/Onderwijs/Boekweb/Handleidingen/ Boekenweb voor de BoekCom]&lt;br /&gt;
* [[DiBSstatistieken]] (wat betekenen al die grafiekjes?)&lt;br /&gt;
* [[Introdingen]] (wat moet de WebCie doen voor de intro? Wat moet de Intro doen op de website?)&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_Docu_Todo</id>
		<title>WebCie Docu Todo</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_Docu_Todo"/>
				<updated>2017-12-04T23:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie Docu Todo to Docu Todo (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Docu Todo (WebCie)]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl</id>
		<title>Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl"/>
				<updated>2017-12-04T22:09:31Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Regel over witruimte na een blok&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat we nog genoeg fietsenstallingen hebben, hebben we hier een korte opsomming van wat we mooie stijl vinden.&lt;br /&gt;
&lt;br /&gt;
* Indentatie is een tab, en doorgaan van regels is twee tabs.&lt;br /&gt;
* Regels langer dan 80 karakters zijn lelijk maar niet verboden. Dus, wees niet bang om statements en expressies over meerdere regels te verdelen.&lt;br /&gt;
* Na een blok (functiedefinities, &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;foreach&amp;lt;/code&amp;gt; etc.) komt precies één witregel.&lt;br /&gt;
* Klassen zijn UpperCamelCase en functies, variabelen enzo zijn lowerCamelCase.&lt;br /&gt;
* Heb je een afkorting zoals CSV, dan doen we CamelCase nog steeds met hoofdletters: &amp;lt;code&amp;gt;CSVPagina&amp;lt;/code&amp;gt;, niet &amp;lt;code&amp;gt;CsvPagina&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Doxygen-commando's zijn met @: &amp;lt;code&amp;gt;@brief&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@param&amp;lt;/code&amp;gt; bla, &amp;lt;code&amp;gt;@returns&amp;lt;/code&amp;gt;, enz.&lt;br /&gt;
* De &amp;lt;code&amp;gt;HTMLPage&amp;lt;/code&amp;gt; maak je aan in de controller, de view returnt &amp;lt;code&amp;gt;HTMLObject&amp;lt;/code&amp;gt;en die je erin kan stoppen.&lt;br /&gt;
* Als je wilt je checken of iets &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is, gebruik dan altijd &amp;lt;code&amp;gt;is_null()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vul je andere favoriete pet peeves hier in!&lt;br /&gt;
&lt;br /&gt;
Als je iets in code verandert die zich niet helemaal houdt aan deze stijl, fix dat dan (minstens in de methode waar het om gaat).&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl</id>
		<title>Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl"/>
				<updated>2017-12-04T21:52:15Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Opmerking over stijl fixen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat we nog genoeg fietsenstallingen hebben, hebben we hier een korte opsomming van wat we mooie stijl vinden.&lt;br /&gt;
&lt;br /&gt;
* Indentatie is een tab, en doorgaan van regels is twee tabs.&lt;br /&gt;
* Regels langer dan 80 karakters zijn lelijk maar niet verboden.&lt;br /&gt;
* Klassen zijn UpperCamelCase en functies, variabelen enzo zijn lowerCamelCase.&lt;br /&gt;
* Heb je een afkorting zoals CSV, dan doen we CamelCase nog steeds met hoofdletters: &amp;lt;code&amp;gt;CSVPagina&amp;lt;/code&amp;gt;, niet &amp;lt;code&amp;gt;CsvPagina&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Doxygen-commando's zijn met @: &amp;lt;code&amp;gt;@brief&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@param&amp;lt;/code&amp;gt; bla, &amp;lt;code&amp;gt;@returns&amp;lt;/code&amp;gt;, enz.&lt;br /&gt;
* De &amp;lt;code&amp;gt;HTMLPage&amp;lt;/code&amp;gt; maak je aan in de controller, de view returnt &amp;lt;code&amp;gt;HTMLObject&amp;lt;/code&amp;gt;en die je erin kan stoppen.&lt;br /&gt;
* Als je wilt je checken of iets &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is, gebruik dan altijd &amp;lt;code&amp;gt;is_null()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vul je andere favoriete pet peeves hier in!&lt;br /&gt;
&lt;br /&gt;
Als je iets in code verandert die zich niet helemaal houdt aan deze stijl, fix dat dan (minstens in de methode waar het om gaat).&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl</id>
		<title>Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl"/>
				<updated>2017-12-04T21:50:17Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Opmerking over is_null()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat we nog genoeg fietsenstallingen hebben, hebben we hier een korte opsomming van wat we mooie stijl vinden.&lt;br /&gt;
&lt;br /&gt;
* Indentatie is een tab, en doorgaan van regels is twee tabs.&lt;br /&gt;
* Regels langer dan 80 karakters zijn lelijk maar niet verboden.&lt;br /&gt;
* Klassen zijn UpperCamelCase en functies, variabelen enzo zijn lowerCamelCase.&lt;br /&gt;
* Heb je een afkorting zoals CSV, dan doen we CamelCase nog steeds met hoofdletters: &amp;lt;code&amp;gt;CSVPagina&amp;lt;/code&amp;gt;, niet &amp;lt;code&amp;gt;CsvPagina&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Doxygen-commando's zijn met @: &amp;lt;code&amp;gt;@brief&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@param&amp;lt;/code&amp;gt; bla, &amp;lt;code&amp;gt;@returns&amp;lt;/code&amp;gt;, enz.&lt;br /&gt;
* De &amp;lt;code&amp;gt;HTMLPage&amp;lt;/code&amp;gt; maak je aan in de controller, de view returnt &amp;lt;code&amp;gt;HTMLObject&amp;lt;/code&amp;gt;en die je erin kan stoppen.&lt;br /&gt;
* Als je wilt je checken of iets &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; is, gebruik dan altijd &amp;lt;code&amp;gt;is_null()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vul je andere favoriete pet peeves hier in!&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl</id>
		<title>Codestijl</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Codestijl"/>
				<updated>2017-12-04T21:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Meer code tags == meer beter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat we nog genoeg fietsenstallingen hebben, hebben we hier een korte opsomming van wat we mooie stijl vinden.&lt;br /&gt;
&lt;br /&gt;
* Indentatie is een tab, en doorgaan van regels is twee tabs.&lt;br /&gt;
* Regels langer dan 80 karakters zijn lelijk maar niet verboden.&lt;br /&gt;
* Klassen zijn UpperCamelCase en functies, variabelen enzo zijn lowerCamelCase.&lt;br /&gt;
* Heb je een afkorting zoals CSV, dan doen we CamelCase nog steeds met hoofdletters: &amp;lt;code&amp;gt;CSVPagina&amp;lt;/code&amp;gt;, niet &amp;lt;code&amp;gt;CsvPagina&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Doxygen-commando's zijn met @: &amp;lt;code&amp;gt;@brief&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@param&amp;lt;/code&amp;gt; bla, &amp;lt;code&amp;gt;@returns&amp;lt;/code&amp;gt;, enz.&lt;br /&gt;
* De &amp;lt;code&amp;gt;HTMLPage&amp;lt;/code&amp;gt; maak je aan in de controller, de view returnt &amp;lt;code&amp;gt;HTMLObject&amp;lt;/code&amp;gt;en die je erin kan stoppen.&lt;br /&gt;
&lt;br /&gt;
Vul je andere favoriete pet peeves hier in!&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/SVN_(WebCie)</id>
		<title>SVN (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/SVN_(WebCie)"/>
				<updated>2017-11-27T21:39:11Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie SVN to SVN (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:WebCie]]&lt;br /&gt;
&lt;br /&gt;
We gebruiken tegenwoordig [[WebCie Git]], dus het overgrote gedeelte van de pagina staat vanaf nu in html-comments. Check dus de source als je toch nog SVN moet leren!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
SVN (Subversion) is het magische systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Ieder WebCie-lid heeft een kopie (een checkout) van het volledige systeem staan op zijn eigen account (in de map ~/wwwdebug). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op http://blabla.debug.a-eskwadraat.nl). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp. &lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met SVN.&lt;br /&gt;
&lt;br /&gt;
==svn up==&lt;br /&gt;
Met &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; zorg je ervoor dat je locale versie geupdate wordt met alle wijzigingen die de rest van de WebCie heeft aangebracht. Doe dit dus altijd voordat je begint met hekken, anders wijzig je misschien dingen die al door anderen gewijzigd zijn en bestaat de kans op collisions!&lt;br /&gt;
&lt;br /&gt;
Typische output van een &amp;lt;code&amp;gt;svn update&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[otto@nikola]~/wwwdebug$ svn up&lt;br /&gt;
U    www/WhosWho4/Controllers/Activiteiten.php&lt;br /&gt;
U    www/WhosWho4/Activiteit.view.php&lt;br /&gt;
U    www/WhosWho4/Deelnemer.cls.php&lt;br /&gt;
U    www/WhosWho4/Lid.view.php&lt;br /&gt;
&lt;br /&gt;
Fetching external item into 'libdb'&lt;br /&gt;
External at revision 75.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fetching external item into 'gettext/voc'&lt;br /&gt;
External at revision 153.&lt;br /&gt;
&lt;br /&gt;
At revision 12329.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==svn st==&lt;br /&gt;
Met &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; vraag je de huidige status op van jouw lokale kopie.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[otto@nikola]~/wwwdebug$ svn st&lt;br /&gt;
X       libdb&lt;br /&gt;
    S   gettext&lt;br /&gt;
X       gettext/voc&lt;br /&gt;
    S   www&lt;br /&gt;
M       www/WhosWho4/Activiteit.view.php&lt;br /&gt;
M       www/javascript/Activiteit/Wijzig.js&lt;br /&gt;
    S   lib&lt;br /&gt;
    S   scripts&lt;br /&gt;
M       scripts/script-init.php&lt;br /&gt;
    S   docs&lt;br /&gt;
&lt;br /&gt;
Performing status on external item at 'libdb'&lt;br /&gt;
&lt;br /&gt;
Performing status on external item at 'gettext/voc'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je ziet een lijstje met wijzigingen. Je kan de items met een X of een S ervoor negeren, evenals scripts/script-init.php.&lt;br /&gt;
&lt;br /&gt;
We concluderen dat de bestanden &amp;lt;code&amp;gt;www/WhosWho4/Activiteit.view.php&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;www/javascript/Activiteit/Wijzig.js&amp;lt;/code&amp;gt; gewijzigd zijn.&lt;br /&gt;
&lt;br /&gt;
==svn diff==&lt;br /&gt;
Met &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; bekijk je alle wijzigingen die er zijn tussen jouw lokale kopie en de huidige revisie. Gebruik &amp;lt;code&amp;gt;svn diff bestand1 bestand2 ...&amp;lt;/code&amp;gt; om de wijzigingen van een of meer bestanden te bekijken. &lt;br /&gt;
&lt;br /&gt;
Met plusjes en minnetjes wordt er weergegeven welke regels weggehaald zijn en welke er bij zijn gekomen.&lt;br /&gt;
&lt;br /&gt;
==svn ci==&lt;br /&gt;
Als je tevreden bent met de wijzigingen die &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; je voorgeschoteld hebt, kan je je werk committen met &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt;. Ook hier kan je weer losse bestanden mee pakken door die erachter te zetten zoals bij diff. Je komt dan in nano terecht, en er staat welke bestanden je op het punt staat te committen.&lt;br /&gt;
&lt;br /&gt;
Schrijf een duidelijke omschrijving van wat jouw commit bewerkstelligd, anders wordt de rest van de WebCie boos! Vervolgens ram je op Ctrl-X en Y, en hopla jouw wijzigingen worden opgenomen in het centrale systeem. Als jouw collega's svn uppen krijgen ze dus jouw code!&lt;br /&gt;
&lt;br /&gt;
==Overig==&lt;br /&gt;
#&amp;lt;code&amp;gt;svn add bestand&amp;lt;/code&amp;gt; - gebruik dit als je een volledig nieuw bestand hebt gemaakt. Nu wordt deze ook meegenomen bij je svn status, diffs en commits!&lt;br /&gt;
#&amp;lt;code&amp;gt;svn revert bestand&amp;lt;/code&amp;gt; - als je een chaos van een bestand hebt gemaakt, reset je hem hiermee weer naar de versie zoals die centraal geadministreerd stond.&lt;br /&gt;
&lt;br /&gt;
==Collisions==&lt;br /&gt;
Als je dit ziet, ben je de sjaak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[otto@nikola]~/wwwdebug$ svn up&lt;br /&gt;
U    www/WhosWho4/Controllers/Activiteiten.php&lt;br /&gt;
U    www/WhosWho4/Activiteit.view.php&lt;br /&gt;
U    www/WhosWho4/Deelnemer.cls.php&lt;br /&gt;
U    www/WhosWho4/Lid.view.php&lt;br /&gt;
U    www/WhosWho4/Contact.cls.php&lt;br /&gt;
Conflict discovered in 'www/WhosWho4/Persoon.view.php'.&lt;br /&gt;
Select: (p) postpone, (df) diff-full, (e) edit,&lt;br /&gt;
        (mc) mine-conflict, (tc) theirs-conflict,&lt;br /&gt;
        (s) show all options:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je hebt dan wijzigingen aangebracht in een bestand dat inmiddels door iemand anders is gewijzigd en gecommit, en deze wijziging botst met die van jouw. Wederom een reden om vaak &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; te doen! &lt;br /&gt;
&lt;br /&gt;
Neem de tijd om even te kijken wat het probleem is (de commit van je collega staat in je mail), je kan expliciet het probleem zien door &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; (diff full) te typen.&lt;br /&gt;
&lt;br /&gt;
Dan concludeer je meestal dat je collega gelijk heeft, en jouw wijziging genegeerd moet worden. Kies daarvoor &amp;lt;code&amp;gt;tf&amp;lt;/code&amp;gt; (theirs-full). Je bestand wordt dan volledig geoverride, wat meestal de bedoeling is. &lt;br /&gt;
&lt;br /&gt;
Schakel indien nodig een ervarener WebCie-er in.&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Ga naar de live vm met &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt; en log in als WebCie met &amp;lt;code&amp;gt;s webcie&amp;lt;/code&amp;gt;. De site staat in &amp;lt;code&amp;gt;/srv/http/www/www&amp;lt;/code&amp;gt;, en je kunt gewoon een &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; doen om de live site up-to-date te maken met de SVN repo.&lt;br /&gt;
&lt;br /&gt;
== Geen wachtwoorden! ==&lt;br /&gt;
Uit een mail van een zekere [[User:Pepijno|Pepijn &amp;quot;neger&amp;quot; Overbeeke]]:&lt;br /&gt;
&lt;br /&gt;
Goed nieuws! Minder wachtwoorden! Het is me eindelijk gelukt om authenticatie van de svn-repo te koppellen aan het systeem dus we hebben geen aparte wachtwoorden voor de svn meer nodig. Het is zelfs zo dat als je in de werkkamer bent ingelogd dat je dan helemaal geen wachtwoord meer nodig hebt om bij de svn te komen (dit betekent niet dat iedereen er zomaar bij kan). Dat komt vanwege kerberos tickets enzo. Overigens is de default fallback als je geen kerberosticket hebt je systeemaccount met systeemwachtwoord, maar met een kerberosticket is de svn wel een heel stuk sneller. Je kan altijd een nieuwe ticket krijgen door in de terminal 'kinit *account*' te doen (met natuurlijk als account je eigen accountnaam). Anyway, mochten er problemen mee zijn, laat het dan vooral aan me weten.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hoe verhuis ik SVN naar Git? ==&lt;br /&gt;
&lt;br /&gt;
In december 2016 heeft de WebCie besloten om over te stappen naar Git. Omdat dit nogal een klus is en meerdere dagen duurde, leek het [[User:Timb|me]] handig om voor mezelf ook meteen bij te houden wat er voor stappen nodig waren. Zie ook [https://stackoverflow.com/questions/79165/how-to-migrate-svn-repository-with-history-to-a-new-git-repository StackOverflow] en [http://www.pauldowman.com/2008/07/26/how-to-convert-from-subversion-to-git/ iemands website].&lt;br /&gt;
&lt;br /&gt;
Maak in je homedir een mapje waar alle tsjak in terechtkomt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/svn2git&lt;br /&gt;
&amp;lt;/pre&amp;gt;                &lt;br /&gt;
                                                              &lt;br /&gt;
Eerst zoeken we alle committers uit zodat we die naar git kunnen vertalen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/wwwdebug&lt;br /&gt;
git svn rebase&lt;br /&gt;
git shortlog -sn &amp;gt; ~/svn2git/committers.txt&lt;br /&gt;
cd ~/svn2git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(alternatief als je nog geen gitsvn-checkout hebt, maar werkt niet want er staan HEEL ERG VEEL dingen in SVN:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn log --quiet https://svn.a-eskwadraat.nl/svn/www/ | grep '^r' | awk '{print $3}' | sort -u &amp;gt; committers.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
Vertaal nu gebruikersnamen naar naam + emailadres (het formaat is &amp;lt;code&amp;gt;gebruikersnaam = Naam &amp;amp;lt;emailadres&amp;amp;rt;&amp;lt;/code&amp;gt;. Gebruik bijvoorbeeld dit vim-macro: &amp;lt;code&amp;gt;|df→yiw$a = ^[pa &amp;lt;^[pa@a-eskwadraat.nl&amp;gt;^[j&amp;lt;/code&amp;gt; (waarbij &amp;lt;code&amp;gt;→&amp;lt;/code&amp;gt; staat voor tab en &amp;lt;code&amp;gt;^[&amp;lt;/code&amp;gt; voor escape)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vim authors.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We gaan nu een schone kopie van de repo maken om daar verscheidene vertalingen op toe te passen. Dit duurt '''ongelofelijk''' lang want er staan HEEL ERG VEEL dingen in SVN:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git svn clone https://svn.a-eskwadraat.nl/svn/www/ --no-metadata -A authors.txt -t tags -b branches -T trunk wwwdebug &amp;gt;&amp;gt;fetch_log 2&amp;gt;&amp;gt;error_log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Merk op dat we elke branch uitchecken en het op zijn minst lineair is in het totaal aantal wijzigingen in elke commit op elke branch, wat ook wel O(griezelig groot) heet.)&lt;br /&gt;
&lt;br /&gt;
Je kan nu misschien de volgende errors krijgen (hiervoor hebben we de bestanden fetch_log en error_log want een paar duizend commits keer een paar duizend files scrolt meteen uit je terminalbuffer):&lt;br /&gt;
&lt;br /&gt;
* ontbrekende author: voeg die toe in authors.txt en &amp;lt;code&amp;gt;git svn fetch &amp;gt;&amp;gt;fetch_log 2&amp;gt;&amp;gt;error_log&amp;lt;/code&amp;gt; verder&lt;br /&gt;
* ontbrekende bestanden (absent_file en/of object not found in commit): ''Volgens het internet:'' doe &amp;lt;code&amp;gt;git svn reset -r...&amp;lt;/code&amp;gt; tot de laatste commit die wel klopte en &amp;lt;code&amp;gt;git svn fetch &amp;gt;&amp;gt;fetch_log 2&amp;gt;&amp;gt;error_log&amp;lt;/code&amp;gt; verder. Dit bleek niet te werken bij het fetchen van r15195 naar trunk, dus toen ben ik maar een bestaande git-svn checkout gaan bewerken.&lt;br /&gt;
&lt;br /&gt;
Vraag een sysopper of die heel lief voor je wil zijn en de commithooks uit de svn-repository in &amp;lt;code&amp;gt;~/svn2git/hooks&amp;lt;/code&amp;gt; wil zetten. Liefst ook het script dat de WebCie een mail stuurt als een nieuwe commit is gepusht, op dit moment te vinden in &amp;lt;code&amp;gt;/usr/share/subversion/hook-scripts/mailer/mailer.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu gaan we nog wat restjes ledendata weghalen, want blijkbaar was het een ding vroeger om ledendata in je repo te zetten... Zie ook [https://stackoverflow.com/questions/13988511/remove-a-directory-from-all-previous-commits StackOverflow].&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch www/whoswho_cprogs.old/' --prune-empty --tag-name-filter cat -- --all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Check of het ook weg is in de obsolete branch, of mieter gewoon die hele branch weg!)&lt;br /&gt;
&lt;br /&gt;
Importeer de commit-hooks van subversion en pas ze aan zodat ze met git werken. Ik heb besloten om ze in een nieuwe map hooks te zetten en dan te symlinken. Dit is een boel gespecialiseerd programmeerwerk, dus kan ik verder geen hints voor geven. Check wel even dat al je dingen executable zijn!&lt;br /&gt;
&lt;br /&gt;
Pas in je lokale repository ook de cronscripts aan zodat ze werken met git ipv svn.&lt;br /&gt;
&lt;br /&gt;
Nu gaan we dingen beschikbaar maken! Maak een repo voor alle commits en eentje voor de hooks. Op &amp;lt;code&amp;gt;vm-www&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /srv/git /srv/git-hooks&lt;br /&gt;
sudo chown webcie:webcie /srv/git /srv/git-hooks&lt;br /&gt;
sudo chmod o= /srv/git /srv/git-hooks&lt;br /&gt;
sudo chmod ug=rwx /srv/git /srv/git-hooks&lt;br /&gt;
sudo chmod g+s /srv/git /srv/git-hooks&lt;br /&gt;
cd /srv/git&lt;br /&gt;
git init --bare # want we willen niet dat er een checkout komt!&lt;br /&gt;
cd ../git-hooks&lt;br /&gt;
git init&lt;br /&gt;
git remote add origin ../git&lt;br /&gt;
git config core.sparsecheckout true # we hoeven alleen de hooks hier te hebben&lt;br /&gt;
echo hooks/ &amp;gt;&amp;gt; .git/info/sparse-checkout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In je lokale git-repo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote add origin ssh://vm-www/srv/git&lt;br /&gt;
git push origin master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Op vm-www, in &amp;lt;code&amp;gt;/srv/git-hooks&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
cd /srv/git/hooks&lt;br /&gt;
ln -s /srv/git-hooks/* .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installeer een ssh key zodat je als user webcie kan git pull'en.&lt;br /&gt;
Op vm-www-debug als user webcie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen                                                                     &lt;br /&gt;
ssh-copy-id vm-www     &lt;br /&gt;
      &lt;br /&gt;
# Maak nu de repo voor demosite                                                      &lt;br /&gt;
mkdir /srv/http/demo/git                                                       &lt;br /&gt;
cd /srv/http/demo/git                                                          &lt;br /&gt;
git init                                                                       &lt;br /&gt;
git remote add origin ssh://vm-www/srv/git                                     &lt;br /&gt;
git pull origin master                                                      &lt;br /&gt;
&lt;br /&gt;
# Stop de huidige inhoud van demosite in je git-repo                              &lt;br /&gt;
rm -r gettext lib scripts share www                                            &lt;br /&gt;
mv ../gettext ../lib ../scripts ../share ../www .                              &lt;br /&gt;
# en gebruik symlinks om het weer werkend te krijgen                           &lt;br /&gt;
ln -s /srv/http/demo/git/gettext ..                                            &lt;br /&gt;
ln -s /srv/http/demo/git/lib ..                                                &lt;br /&gt;
ln -s /srv/http/demo/git/scripts ..                                            &lt;br /&gt;
ln -s /srv/http/demo/git/share ..                                              &lt;br /&gt;
ln -s /srv/http/demo/git/www ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check goed dat alles werkt (zie ook [https://www.a-eskwadraat.nl/Service/Bugweb/7334 Bug #7334] voor een error die random was begonnen te gebeuren en random weer ophield), en doe hetzelfde voor de livesite in &amp;lt;code&amp;gt;/srv/http/www/git&amp;lt;/code&amp;gt; (ik ga geen commando's geven want je moet hier heel goed bij nadenken!)&lt;br /&gt;
        &lt;br /&gt;
Ook nog wat cronjobs installeren (die je als het goed is al hebt vertaald van svn naar git!)&lt;br /&gt;
                                                                  &lt;br /&gt;
Op vm-www-debug als user webcie:&lt;br /&gt;
&amp;lt;pre&amp;gt;               &lt;br /&gt;
cd /srv/http/demo/scripts                                                      &lt;br /&gt;
crontab -l # check dat je de juiste crontab wil aanpassen                      &lt;br /&gt;
crontab cron/crontab_vm-www-debug.webcie                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Op vm-www als user webcie:&lt;br /&gt;
&amp;lt;pre&amp;gt;               &lt;br /&gt;
cd /srv/http/demo/scripts                                                      &lt;br /&gt;
crontab -l # check dat je de juiste crontab wil aanpassen                      &lt;br /&gt;
crontab cron/crontab_vm-www.webcie                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;        &lt;br /&gt;
&lt;br /&gt;
Zorg er tenslotte &amp;quot;eventjes&amp;quot; voor dat iedereen overstapt naar Git en alle documentatie weer klopt.&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_SVN</id>
		<title>WebCie SVN</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_SVN"/>
				<updated>2017-11-27T21:39:11Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie SVN to SVN (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[SVN (WebCie)]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2017-11-20T22:52:23Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Schrijf die shit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows (maar we volgen dit systeem niet precies)&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
;develop&lt;br /&gt;
: Hier staat code op die in principe werkt, maar een foutje kan natuurlijk altijd gebeuren, en dat is niet erg. Als het maar gefixt wordt voordat er naar master wordt gemerget.&lt;br /&gt;
;master&lt;br /&gt;
: De code die hier op staat moet zeker wel werken, en op ieder moment live gezet kunnen worden. Je ''kan'' hotfixes hierop committen, maar let dan goed op dat ze werken, en houd de commits klein!&lt;br /&gt;
;feature-$bla&lt;br /&gt;
: Maak een nieuwe feature branch vanaf develop wanneer je een niet-miniscule feature gaat toevoegen. Zodra je feature klaar is, zorg je eventueel dat ie een beetje netjes is met &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, en vervolgens merge je 'm terug naar develop.&lt;br /&gt;
&lt;br /&gt;
== Doetjes &amp;amp; Doe-nietjes ==&lt;br /&gt;
&lt;br /&gt;
* '''Doe''': pull met een rebase (&amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;; ik heb zelf een shorthand hiervoor ge-aliased). Merge commits tussen een lokale en remote versie van een branch zijn in 99% van de gevallen onnodig, en in die 1% dat er een substantieel verschil is tussen je lokale code en de remote (die ook niet makkelijk te rebasen valt), heb je gewoon teveel geschreven zonder te pullen, pannekoek! &lt;br /&gt;
* '''Doe''': merge altijd met git &amp;lt;code&amp;gt;git merge --no-ff&amp;lt;/code&amp;gt;. Hierdoor kan je altijd zien wanneer er een merge is geweest. Het nadeel is wel dat bisecten en blamen wat moeilijker gaat, omdat merge commits ook in de geschiedenis van een bestand worden meegeteld.&lt;br /&gt;
* '''Doe-niet''': &amp;lt;code&amp;gt;git cherry-pick&amp;lt;/code&amp;gt;. Dit zorgt voor erg veel redundancy in de history, waardoor het een stuk minder overzichtelijk wordt. Een uitzondering is als je per ongeluk toch een hotfix op develop hebt gezet; dan mag die wel naar master ge-cherry-pickt.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2017-11-20T17:37:46Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
;develop&lt;br /&gt;
:&lt;br /&gt;
;master&lt;br /&gt;
:&lt;br /&gt;
;feature-$bla&lt;br /&gt;
:&lt;br /&gt;
;bug-$bla&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
== Dos &amp;amp; Don'ts ==&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow</id>
		<title>Git Workflow</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_Workflow"/>
				<updated>2017-11-20T17:37:15Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Created page with &amp;quot;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Omdat Git zo'n flexibel systeem is, zijn er heel veel manieren om erin je revisiegeschiedenis bij te houden. Dus om te voorkomen dat het allemaal een zooitje wordt, leek het mij een goed idee om er afspraken over te maken.&lt;br /&gt;
&lt;br /&gt;
Dit is mijn eigen idee van hoe ik het graag zou willen, maar jullie kunnen gerust je eigen suggesties doen, in de pagina zelf of op de talk page.&lt;br /&gt;
&lt;br /&gt;
Zie ook: https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
;develop&lt;br /&gt;
:&lt;br /&gt;
;master&lt;br /&gt;
:&lt;br /&gt;
;feature-$bla&lt;br /&gt;
:&lt;br /&gt;
;bug-$bla&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
== Dos &amp;amp; Don'ts&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-11-13T23:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijvoorbeeld de URL &amp;lt;code&amp;gt;git.example.com/user/repo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTE_URL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe.&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. ([https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En klaar is Kees! (Hopelijk...)&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_Git</id>
		<title>WebCie Git</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/WebCie_Git"/>
				<updated>2017-11-12T22:00:28Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie Git to Git (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Git (WebCie)]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-11-12T22:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Daanr moved page WebCie Git to Git (WebCie): Betere alfabetische sortering -&amp;gt; makkelijker te vinden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijvoorbeeld de URL &amp;lt;code&amp;gt;git.example.com/user/repo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe.&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. ([https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En klaar is Kees! (Hopelijk...)&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-11-06T15:26:40Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijvoorbeeld de URL &amp;lt;code&amp;gt;git.example.com/user/repo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe.&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. ([https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En klaar is Kees! (Hopelijk...)&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-11-06T15:26:22Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */ Afkortingen zijn eigenlijk helemaal niet cool.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijvoorbeeld de URL &amp;lt;code&amp;gt;git.example.com/user/repo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe.&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;emdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. ([https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En klaar is Kees! (Hopelijk...)&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T21:52:46Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Pleur de gecommente tsjak weg. Je kan het toch teruglezen in de revisiegeschiedenis.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe. &lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;emdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. [https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T21:51:55Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe. &lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;emdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. [https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Info van voor de overstap naar git, weet niet of we dit nog willen hebben.&lt;br /&gt;
&lt;br /&gt;
Als je liever &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;'t dan &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt;'t (en je hebt zin om te leren hoe dat samengaat), dan kun je gebruik maken van &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;. Lees van te voren ook even de online documentatie hiervan, want het loopt allemaal net wat anders dan svn werkt of git zonder svn werkt.&lt;br /&gt;
&lt;br /&gt;
== Je eerste checkout ==&lt;br /&gt;
&lt;br /&gt;
Het handigste is als je een schone checkout maakt van de code, want dan heb je gittroep niet tussen svntroep. Het uitchecken duurt best lang, dus start eerst een &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt;sessie op! Dan kun je binnen die screensessie &amp;lt;code&amp;gt;git svn checkout&amp;lt;/code&amp;gt; doen op de huidige svn-repo (zie [[WebCie SVN]] voor de url). Na heel wat gecheckout waarbij een stuk of tienduizend commits worden binnengehaald, heb je een gitrepository waar je gewoon lokale branches hebt en alles!&lt;br /&gt;
&lt;br /&gt;
== Handige aliassen ==&lt;br /&gt;
&lt;br /&gt;
Je kan in git aliassen instellen om de volgende commando's af te korten. Ze doen ongeveer wat svn doet bij de corresponderende afkortingen, en vooral dat je dingen wat makkelijker met svn kan koppelen. Je mag natuurlijk ook gewoon alle git-svn-commando's uit je hoofd gaan leren.&lt;br /&gt;
&lt;br /&gt;
* ''git ci'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn dcommit &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (zet de commits in je lokale branch om in commits op de svn-server)&lt;br /&gt;
* ''git up'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn rebase &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (haal alle nieuwe veranderingen uit de svn op en zet het tussen je werk neer)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T21:51:20Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Een WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt; &amp;amp;mdash; Voeg de nieuwe repository als een remote toe. &lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt; &amp;amp;emdash; Haal alles op uit de huidige repository.&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; &amp;amp;mdash; Hiermee pushen we alles van origin naar new-origin. [https://stackoverflow.com/questions/23947419 Aldus sprak StackOverflow]) Let wel: misschien pusht dit juist iets te veel. Bij het testen hiervan kwam er bijvoorbeeld een branch op de nieuwe remote met de naam HEAD. Dit moet je dan weer even deleten met e.g. &amp;lt;code&amp;gt;git push new-remote --delete HEAD&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt; &amp;amp;mdash; Verwijder de remote.&lt;br /&gt;
&lt;br /&gt;
Iedereen doet vervolgens:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt; &amp;amp;mdash;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Info van voor de overstap naar git, weet niet of we dit nog willen hebben.&lt;br /&gt;
&lt;br /&gt;
Als je liever &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;'t dan &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt;'t (en je hebt zin om te leren hoe dat samengaat), dan kun je gebruik maken van &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;. Lees van te voren ook even de online documentatie hiervan, want het loopt allemaal net wat anders dan svn werkt of git zonder svn werkt.&lt;br /&gt;
&lt;br /&gt;
== Je eerste checkout ==&lt;br /&gt;
&lt;br /&gt;
Het handigste is als je een schone checkout maakt van de code, want dan heb je gittroep niet tussen svntroep. Het uitchecken duurt best lang, dus start eerst een &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt;sessie op! Dan kun je binnen die screensessie &amp;lt;code&amp;gt;git svn checkout&amp;lt;/code&amp;gt; doen op de huidige svn-repo (zie [[WebCie SVN]] voor de url). Na heel wat gecheckout waarbij een stuk of tienduizend commits worden binnengehaald, heb je een gitrepository waar je gewoon lokale branches hebt en alles!&lt;br /&gt;
&lt;br /&gt;
== Handige aliassen ==&lt;br /&gt;
&lt;br /&gt;
Je kan in git aliassen instellen om de volgende commando's af te korten. Ze doen ongeveer wat svn doet bij de corresponderende afkortingen, en vooral dat je dingen wat makkelijker met svn kan koppelen. Je mag natuurlijk ook gewoon alle git-svn-commando's uit je hoofd gaan leren.&lt;br /&gt;
&lt;br /&gt;
* ''git ci'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn dcommit &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (zet de commits in je lokale branch om in commits op de svn-server)&lt;br /&gt;
* ''git up'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn rebase &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (haal alle nieuwe veranderingen uit de svn op en zet het tussen je werk neer)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T21:21:07Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elke WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De volgende 2 commands hoeven maar één keer, door één persoon gedaan te worden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/\*:refs/heads/\*&amp;lt;/code&amp;gt; ([https://stackoverflow.com/questions/23947419/how-can-i-pull-every-branch-from-origin-remote-and-push-to-our-backup-remote Aldus sprak StackOverflow])&lt;br /&gt;
&lt;br /&gt;
En dit weer door iedereen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Info van voor de overstap naar git, weet niet of we dit nog willen hebben.&lt;br /&gt;
&lt;br /&gt;
Als je liever &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;'t dan &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt;'t (en je hebt zin om te leren hoe dat samengaat), dan kun je gebruik maken van &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;. Lees van te voren ook even de online documentatie hiervan, want het loopt allemaal net wat anders dan svn werkt of git zonder svn werkt.&lt;br /&gt;
&lt;br /&gt;
== Je eerste checkout ==&lt;br /&gt;
&lt;br /&gt;
Het handigste is als je een schone checkout maakt van de code, want dan heb je gittroep niet tussen svntroep. Het uitchecken duurt best lang, dus start eerst een &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt;sessie op! Dan kun je binnen die screensessie &amp;lt;code&amp;gt;git svn checkout&amp;lt;/code&amp;gt; doen op de huidige svn-repo (zie [[WebCie SVN]] voor de url). Na heel wat gecheckout waarbij een stuk of tienduizend commits worden binnengehaald, heb je een gitrepository waar je gewoon lokale branches hebt en alles!&lt;br /&gt;
&lt;br /&gt;
== Handige aliassen ==&lt;br /&gt;
&lt;br /&gt;
Je kan in git aliassen instellen om de volgende commando's af te korten. Ze doen ongeveer wat svn doet bij de corresponderende afkortingen, en vooral dat je dingen wat makkelijker met svn kan koppelen. Je mag natuurlijk ook gewoon alle git-svn-commando's uit je hoofd gaan leren.&lt;br /&gt;
&lt;br /&gt;
* ''git ci'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn dcommit &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (zet de commits in je lokale branch om in commits op de svn-server)&lt;br /&gt;
* ''git up'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn rebase &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (haal alle nieuwe veranderingen uit de svn op en zet het tussen je werk neer)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T20:59:08Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: /* Migreren tussen Git-repo's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elke WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De volgende 2 commands hoeven maar één keer, door één persoon gedaan te worden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch origin&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/*:refs/heads/*&amp;lt;/code&amp;gt; ([https://stackoverflow.com/questions/23947419/how-can-i-pull-every-branch-from-origin-remote-and-push-to-our-backup-remote Aldus sprak StackOverflow])&lt;br /&gt;
&lt;br /&gt;
En dit weer door iedereen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Info van voor de overstap naar git, weet niet of we dit nog willen hebben.&lt;br /&gt;
&lt;br /&gt;
Als je liever &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;'t dan &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt;'t (en je hebt zin om te leren hoe dat samengaat), dan kun je gebruik maken van &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;. Lees van te voren ook even de online documentatie hiervan, want het loopt allemaal net wat anders dan svn werkt of git zonder svn werkt.&lt;br /&gt;
&lt;br /&gt;
== Je eerste checkout ==&lt;br /&gt;
&lt;br /&gt;
Het handigste is als je een schone checkout maakt van de code, want dan heb je gittroep niet tussen svntroep. Het uitchecken duurt best lang, dus start eerst een &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt;sessie op! Dan kun je binnen die screensessie &amp;lt;code&amp;gt;git svn checkout&amp;lt;/code&amp;gt; doen op de huidige svn-repo (zie [[WebCie SVN]] voor de url). Na heel wat gecheckout waarbij een stuk of tienduizend commits worden binnengehaald, heb je een gitrepository waar je gewoon lokale branches hebt en alles!&lt;br /&gt;
&lt;br /&gt;
== Handige aliassen ==&lt;br /&gt;
&lt;br /&gt;
Je kan in git aliassen instellen om de volgende commando's af te korten. Ze doen ongeveer wat svn doet bij de corresponderende afkortingen, en vooral dat je dingen wat makkelijker met svn kan koppelen. Je mag natuurlijk ook gewoon alle git-svn-commando's uit je hoofd gaan leren.&lt;br /&gt;
&lt;br /&gt;
* ''git ci'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn dcommit &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (zet de commits in je lokale branch om in commits op de svn-server)&lt;br /&gt;
* ''git up'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn rebase &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (haal alle nieuwe veranderingen uit de svn op en zet het tussen je werk neer)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)</id>
		<title>Git (WebCie)</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Git_(WebCie)"/>
				<updated>2017-10-30T20:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Voeg een stukje over tussen Git-repo's migreren toe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git (wat staat voor &amp;quot;Git&amp;quot;) is het bovennatuurlijke systeem waarmee we controle houden op wat er gebeurt met alle WebCie-code. Als WebCie-lid heb je een kopie (een ''checkout'') van het volledige systeem staan op je eigen account (in de map &amp;lt;code&amp;gt;~/wwwdebug&amp;lt;/code&amp;gt;). Deze code bepaalt wat jij te zien krijgt in je browser als je naar je persoonlijke debugpagina gaat (lijkt op &amp;lt;code&amp;gt;https://bla-debug.a-eskwadraat.nl&amp;lt;/code&amp;gt;). Als je wijzigingen in deze code aanbrengt, veranderen dus alleen de pagina's op jouw persoonlijke debug-omgeving. Dat noemen we een sandbox, het zorgt er voor dat je rustig je code kan ontwikkelen zonder dat de rest van de WWW daar last van heeft. Bovendien is jouw debugpagina alleen benaderbaar door WebCie-leden, dus als je per ongeluk lekkende SQL-queries schrijft is dat geen ramp.&lt;br /&gt;
&lt;br /&gt;
Op deze pagina staat basale info om aan de slag te gaan met Git. Je kan ook in de [https://git-scm.com/book/en/v2 online handleiding] kijken voor meer pro-tips.&lt;br /&gt;
&lt;br /&gt;
De WebCie is onlangs &amp;lt;!-- dat is dus 2017, laten we kijken hoe lang dat blijft staan --&amp;gt; overgestapt naar Git. Hierbij is ook de svn-geschiedenis gefilterd, dus pas op bij overstappen!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
Een ding waar je bij git waarschijnlijk aan moet wennen is dat iedereen een eigen idee heeft van de geschiedenis van alle code. Op de server staan een setje commitgeschiedenissen (oftewel branches), en op je debug staat ook zo'n setje. Met een beetje geluk komen ze ook nog overeen, maar dat hoeft dus niet! Er zijn commando's om van iemand anders de geschiedenis overnemen. Dan krijg je een kopietje binnen van hun geschiedenis, maar wordt jouw geschiedenis ''niet'' aangepast! Je hebt bijvoorbeeld de volgende branches, allemaal opgeslagen in je eigen debug:&lt;br /&gt;
&lt;br /&gt;
* master (jouw laatste editie van de livesite)&lt;br /&gt;
* develop (jouw eigen editie van de &amp;quot;echte&amp;quot; code)&lt;br /&gt;
* feature-watleuks (jouw eigen editie van deze feature)&lt;br /&gt;
* feature-zoveel (een feature waarvan de server nog helemaal niet weet dat die bestaat)&lt;br /&gt;
* HEAD (wijst naar de laatste commit die bij jou is gebeurd, dus als het goed is de branch waar je nu op werkt)&lt;br /&gt;
* origin/master (wat jij denkt dat de servereditie van de livesite is)&lt;br /&gt;
* origin/develop (wat jij denkt dat de servereditie van de &amp;quot;echte&amp;quot; code is)&lt;br /&gt;
* origin/feature-watleuks (wat jij denkt dat de servereditie van de deze feature is)&lt;br /&gt;
&lt;br /&gt;
Als je &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; doet, zal git de laatste versie van elke branch van de server opvragen en die bewaren in origin/$branch. Dan kun je die weer in jouw branches stoppen met bijvoorbeeld &amp;lt;code&amp;gt;git merge&amp;lt;/code&amp;gt;. Het commando &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; stuurt jouw editie van de huidige branch naar de server. (De server weet dus in principe niet welke gebruikers er zijn of welke branches ze hebben!)&lt;br /&gt;
&lt;br /&gt;
We hebben twee hoofdbranches: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;. De livesite zou gelijk moeten lopen met de branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;, dus we moeten goed opletten wat we daarop zetten. Om makkelijk code te kunnen delen, gaan we in principe alle commits doen op de branch &amp;lt;code&amp;gt;develop&amp;lt;/code&amp;gt;, maar het is nog netter om met branches te werken.&lt;br /&gt;
&lt;br /&gt;
Handige commando's om het overzicht te bewaren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git log&amp;lt;/code&amp;gt; om de commits op je huidige branch te bekijken.&lt;br /&gt;
* &amp;lt;code&amp;gt;git log $commit-of-branch-of-etc&amp;lt;/code&amp;gt; om de commits op een andere branch te bekijken. (Het is handig om hiervoor ook &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te doen.)&lt;br /&gt;
* &amp;lt;code&amp;gt;gitk&amp;lt;/code&amp;gt; als je beter tegen een grafische interface kan.&lt;br /&gt;
* &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; toont je branch, hoe die verschilt met origin/$branch en wat je ten opzichte van je branch hebt aangepast&lt;br /&gt;
* &amp;lt;code&amp;gt;git branch -a&amp;lt;/code&amp;gt; toont elke branch waar git in jouw debug van afweet&lt;br /&gt;
* &amp;lt;code&amp;gt;git log --graph --decorate --pretty=oneline --abbrev-commit&amp;lt;/code&amp;gt; om in de terminal een mooie gerichte graaf van commits te tonen (&amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; voor alle branches tegelijk)&lt;br /&gt;
&lt;br /&gt;
=== Maak een feature ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b feature-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# ga een stukje zitten programmeren&lt;br /&gt;
# heb je nieuwe bestanden toegevoegd: vertel dat aan git met &amp;lt;code&amp;gt;git add $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je bestanden weggooien: doe dat en vertel het tegelijk aan git met &amp;lt;code&amp;gt;git rm $bestand&amp;lt;/code&amp;gt;&lt;br /&gt;
# wil je kijken wat je allemaal hebt gedaan: gebruik &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; en/of &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;&lt;br /&gt;
# ben je tevreden met een setje wijzigingen: commit ze met &amp;lt;code&amp;gt;git add $gewijzigd_bestand1 $gewijzigd_bestand2 ...&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; (het is netjes om eerst nog even te kijken wat je gaat committen zodat er geen troep meekomt)&lt;br /&gt;
# herhaal bovenstaande stappen tot je feature helemaal af is&lt;br /&gt;
# ben je klaar: stop je feature in develop met &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge feature-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; '''(TODO: Of gaan we helemaal hardcore met pull requests beginnen?)'''&lt;br /&gt;
# alle webcie'ers krijgen nu een mailtje met de commits die je hebt gepleegd en zullen je feliciteren en/of afkraken op je programmeerstijl&lt;br /&gt;
&lt;br /&gt;
Nu is werken in je eentje heel leuk, maar samenwerken geeft een veel mooier feestje! Daarom is het aan te raden dat je om de zoveel tijd commits van anderen opvraagt en met ze deelt:&lt;br /&gt;
&lt;br /&gt;
# als iemand anders op je branch heeft gewerkt: doe &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
# als er dingen binnenkomen op develop: stop ze in je branch &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;'en en dan &amp;lt;code&amp;gt;git merge origin/develop&amp;lt;/code&amp;gt;. (Voor echte pro's is er ook &amp;lt;code&amp;gt;git rebase&amp;lt;/code&amp;gt;, maar dat heeft meer problemen met samenwerken op de branch)&lt;br /&gt;
# als je je vooruitgang wilt delen: doe &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; (krijg je een error in de trant van &amp;quot;geen remote voor branch&amp;quot;, doe dan &amp;lt;code&amp;gt;git branch --set-upstream-to origin/feature-$bla&amp;lt;/code&amp;gt; om de remote in te stellen en probeer opnieuw)&lt;br /&gt;
&lt;br /&gt;
=== Fix een bug ===&lt;br /&gt;
&lt;br /&gt;
(Je kan dit proces ook op develop doen als de bug niet zo heel hoge prioriteit heeft. Doe dan gewoon wat hierboven staat.)&lt;br /&gt;
&lt;br /&gt;
Is er een bug die snel opgelost moet worden? Dan gaan we op basis van de livesite werken zodat we de fix apart kunnen houden van eventuele (halfbakken) features.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; om up to date te zijn&lt;br /&gt;
# maak een nieuwe branch met &amp;lt;code&amp;gt;git checkout -b bug-$bla&amp;lt;/code&amp;gt;&lt;br /&gt;
# doe precies hetzelfde programmeer-commitriedeltje als hiervoor beschreven&lt;br /&gt;
# als je in een commit een regel &amp;quot;Closes: #$bugnummer&amp;quot; zet, wordt de bug automatisch op gesloten gezet in Bugweb.&lt;br /&gt;
# ben je klaar: stop je fix in master met &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge bug-$bla&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
# zorg ervoor dat develop up-to-date blijft: &amp;lt;code&amp;gt;git checkout develop&amp;lt;/code&amp;gt; en dan &amp;lt;code&amp;gt;git merge master&amp;lt;/code&amp;gt; en maak het openbaar met &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shit's on fire yo ===&lt;br /&gt;
&lt;br /&gt;
Heb je er een potje van gemaakt, en wil je terug naar de laatste commit? Als je een enkel bestand wil terugzetten, heb je &amp;lt;code&amp;gt;git checkout $bestand&amp;lt;/code&amp;gt;; alles wat je in het bestand hebt gedaan sinds de laatste commit wordt dan teruggezet zoals het was. De makkelijkste manier om echt helemaal alles weg te gooien is met &amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;; elk bestand dat je hebt veranderd t.o.v. je laatste commit wordt dan teruggezet zoals het was. Dit kan dus ook nuttige wijzigingen weggooien!&lt;br /&gt;
&lt;br /&gt;
Heb je er een nog erger potje van gemaakt, en heb je een foute commit gemaakt? Als dit de laatste commit(s) was (waren) op je branch en je hebt ze nog niet gepusht, dan heb je &amp;lt;code&amp;gt;git reset HEAD~1&amp;lt;/code&amp;gt; om de laatste commit weg te gooien (en &amp;lt;code&amp;gt;HEAD~&amp;lt;/code&amp;gt;''n'' om ''n'' commits tegelijk ongedaan te maken.) Heb je ze al wel gepusht, dan moet je naar de aanpak hieronder overgaan.&lt;br /&gt;
&lt;br /&gt;
Heeft iemand anders een enorm potje gemaakt, en wil je de commit ongedaan maken? Doe dan &amp;lt;code&amp;gt;git revert $commit&amp;lt;/code&amp;gt;. Dat maakt een nieuwe commit waarin precies het tegenovergestelde gebeurt van die wijzigingen. De originele commit blijft nog wel in de geschiedenis staan! Als iemand dus geheime data heeft gecommit, moet je toch echt [https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History geavanceerde tools gebruiken].&lt;br /&gt;
&lt;br /&gt;
== Om iets live te zetten ==&lt;br /&gt;
&lt;br /&gt;
Ten eerste: denk goed na of je dit echt wel wilt doen. Er kunnen nog wel eens gebruikers gaan klagen.&lt;br /&gt;
&lt;br /&gt;
Doe gewoon een &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; naar master op je eigen bakkie. Typ lekker &amp;lt;code&amp;gt;./zetLive.sh&amp;lt;/code&amp;gt; in de /scripts map en gaan met die banaan.&lt;br /&gt;
&lt;br /&gt;
== Migreren van SVN naar Git ==&lt;br /&gt;
&lt;br /&gt;
Is jouw debug van voor de overstap? Dan is het niet heel lastig om te switchen!&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen van git-svn ===&lt;br /&gt;
Gebruik je al Git-SVN, dan kun je als volgt switchen:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git branch -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu '''moet''' je handmatig commits van je huidige branches op develop rebasen, want anders gaat de hele geschiedenis stuk. Check dat de 3e commit vanaf het begin begint met &amp;lt;code&amp;gt;9cf65047&amp;lt;/code&amp;gt; ipv &amp;lt;code&amp;gt;cc9c5bb&amp;lt;/code&amp;gt;. Zo niet, ga je allemaal antieke ledendata meepushen (die ik met pijn en moeite heb weggefilterd) en gaat de Autoriteit Persoonsgegevens je slaan.&lt;br /&gt;
&lt;br /&gt;
=== Verhuizen zonder git-svn ===&lt;br /&gt;
Heb je wel een wwwdebug maar nog geen git? Dan moet je iets meer moeite doen om je laatste versie te bewaren:&lt;br /&gt;
# &amp;lt;code&amp;gt;cd wwwdebug&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;svn log&amp;lt;/code&amp;gt; Kijk hier wat de laatste revisie is!&lt;br /&gt;
# &amp;lt;code&amp;gt;git init&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git remote add origin ssh://vm-www/srv/git&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git commit --allow-empty -m &amp;quot;Initial empty commit&amp;quot;&amp;lt;/code&amp;gt; (want git snapt het niet als je geen commit hebt gedaan en wel branches wil beginnen, dan maar zo)&lt;br /&gt;
# &amp;lt;code&amp;gt;git log origin/master&amp;lt;/code&amp;gt; Kijk hier welke git-commit overeenkomt met de laatste svn-revisie.&lt;br /&gt;
# &amp;lt;code&amp;gt;git reset --mixed $laatste_revisie_commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git checkout -t origin/develop&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;git stash apply&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vertaalsleutel svn -&amp;gt; git ===&lt;br /&gt;
&lt;br /&gt;
Het belangrijkste verschil is dat git heel veel verschillende commitgeschiedenissen heeft en svn maar eentje. Bij elk commando vraagt svn bijvoorbeeld aan de server of er nog commits bijgekomen zijn. Git doet dat alleen als je erom vraagt met &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt;. Het is daarom een goed idee om als svn'er voor elk commando &amp;lt;code&amp;gt;git fetch&amp;lt;/code&amp;gt; te runnen totdat je doorhebt wanneer het echt nuttig is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; (vraag aan de remotes welke veranderingen er zijn, merge die automatisch)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git status&amp;lt;/code&amp;gt; (vraag de huidige status op van jouw lokale kopie ten opzichte van jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn diff&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; (bekijk alle wijzigingen die er zijn tussen jouw lokale kopie en jouw laatste commit)&lt;br /&gt;
* &amp;lt;code&amp;gt;svn ci&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;git commit -a&amp;lt;/code&amp;gt; (stop al je wijzigingen in een nieuwe commit, die je zou kunnen opsturen naar de andere WebCie'ers)&lt;br /&gt;
&lt;br /&gt;
== Een nieuwe git-repo opzetten ==&lt;br /&gt;
&lt;br /&gt;
Als je code die niet bij de livesite hoort wilt delen met de WebCie, kan dit via een aparte git-repo. Op deze manier maak je een nieuwe repo:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ssh vm-www&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo mkdir git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chown webcie:webcie /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod o= /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod ug=rwx /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo chmod g+s /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cd /srv/git-$bla-repo&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git init --bare --shared&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nu kun je als het goed is een &amp;lt;code&amp;gt;git clone ssh://vm-www/srv/git-$bla-repo&amp;lt;/code&amp;gt; doen!&lt;br /&gt;
&lt;br /&gt;
== Migreren tussen Git-repo's ==&lt;br /&gt;
&lt;br /&gt;
Als de repository ergens anders gehost gaat worden, wil je natuurlijk dat alle huidige code daar terechtkomt.&lt;br /&gt;
&lt;br /&gt;
Stel dat er al een repository is aangemaakt voor de code (e.g. zoals hierboven beschreven), met bijv. de URL &amp;lt;code&amp;gt;git.example.com&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elke WebCie'r moet dan doen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote add new-origin $REMOTEURL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De volgende 2 commands hoeven maar één keer, door één persoon gedaan te worden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git fetch --all origin&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git push new-origin refs/remotes/origin/*:refs/heads/*&amp;lt;/code&amp;gt; ([https://stackoverflow.com/questions/23947419/how-can-i-pull-every-branch-from-origin-remote-and-push-to-our-backup-remote Aldus sprak StackOverflow])&lt;br /&gt;
&lt;br /&gt;
En dit weer door iedereen:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote set-url origin $REMOTE_URL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;git remote remove new-origin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Info van voor de overstap naar git, weet niet of we dit nog willen hebben.&lt;br /&gt;
&lt;br /&gt;
Als je liever &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;'t dan &amp;lt;code&amp;gt;svn&amp;lt;/code&amp;gt;'t (en je hebt zin om te leren hoe dat samengaat), dan kun je gebruik maken van &amp;lt;code&amp;gt;git-svn&amp;lt;/code&amp;gt;. Lees van te voren ook even de online documentatie hiervan, want het loopt allemaal net wat anders dan svn werkt of git zonder svn werkt.&lt;br /&gt;
&lt;br /&gt;
== Je eerste checkout ==&lt;br /&gt;
&lt;br /&gt;
Het handigste is als je een schone checkout maakt van de code, want dan heb je gittroep niet tussen svntroep. Het uitchecken duurt best lang, dus start eerst een &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt;sessie op! Dan kun je binnen die screensessie &amp;lt;code&amp;gt;git svn checkout&amp;lt;/code&amp;gt; doen op de huidige svn-repo (zie [[WebCie SVN]] voor de url). Na heel wat gecheckout waarbij een stuk of tienduizend commits worden binnengehaald, heb je een gitrepository waar je gewoon lokale branches hebt en alles!&lt;br /&gt;
&lt;br /&gt;
== Handige aliassen ==&lt;br /&gt;
&lt;br /&gt;
Je kan in git aliassen instellen om de volgende commando's af te korten. Ze doen ongeveer wat svn doet bij de corresponderende afkortingen, en vooral dat je dingen wat makkelijker met svn kan koppelen. Je mag natuurlijk ook gewoon alle git-svn-commando's uit je hoofd gaan leren.&lt;br /&gt;
&lt;br /&gt;
* ''git ci'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn dcommit &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (zet de commits in je lokale branch om in commits op de svn-server)&lt;br /&gt;
* ''git up'': &amp;lt;code&amp;gt;git stash &amp;amp;&amp;amp; git svn rebase &amp;amp;&amp;amp; git stash apply&amp;lt;/code&amp;gt; (haal alle nieuwe veranderingen uit de svn op en zet het tussen je werk neer)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Project_SOEPMES</id>
		<title>Project SOEPMES</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Project_SOEPMES"/>
				<updated>2017-10-30T20:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Ook een itempje over de Dia&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Opdat de code niet versteent.''&lt;br /&gt;
&lt;br /&gt;
Project #SOEPMES# zou ervoor moeten zorgen dat alle code die we gebruiken ook gewoon fijn is, met makkelijk toe te voegen features.&lt;br /&gt;
&lt;br /&gt;
* Kies pagina's om te deprecaten.&lt;br /&gt;
* Documenteer ook wat de domeininhoud is van een object ipv de codeinhoud.&lt;br /&gt;
* Gebruik requestobjecten ipv stateful dingen echoen.&lt;br /&gt;
* Form parsen moet beter kunnen.&lt;br /&gt;
* Linten en formatten.&lt;br /&gt;
* Iets als de Dia, maar don zonder vreselijke merge conflicts.&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Webredactie_SVN</id>
		<title>Webredactie SVN</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Webredactie_SVN"/>
				<updated>2017-10-10T21:52:34Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Voeg {{Outdated}} toe. We gebruiken SVN niet/nauwelijks meer!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Outdated}}&lt;br /&gt;
&lt;br /&gt;
SVN wordt door de PromoCie gebruikt om de strings op de website te vertalen, die niet in Publisher staan. Zie voor documentatie voor de WebCie de sectie [[#Voor_de_WebCie|Voor de WebCie]], voor de PromoCie zie [[#Voor_de_PromoCie|Voor de PromoCie]].&lt;br /&gt;
&lt;br /&gt;
== Voor de WebCie ==&lt;br /&gt;
&lt;br /&gt;
Om ervoor te zorgen dat de PromoCie tekst heeft om te vertalen doe je het volgende:&lt;br /&gt;
&lt;br /&gt;
*Ga naar www/gettext en voer het update bestand uit via &amp;lt;code&amp;gt;./update&amp;lt;/code&amp;gt;&lt;br /&gt;
*De wijzigingen in voc/en_GB.po en voc/nl_NL.po kun je dan vervolgens committen&lt;br /&gt;
&lt;br /&gt;
Denk eraan dat je altijd tekst in je code beschikbaar maakt voor vertalen, bijvoorbeeld &amp;lt;code&amp;gt;_('Deze tekst moet vertaald worden')&amp;lt;/code&amp;gt;. Deze strings moeten niet te triviaal worden, anders heeft de vertaler er niets aan. Als je zomaar &amp;lt;code&amp;gt;_('overig')&amp;lt;/code&amp;gt; neerzet, dan weet de vertaler echt niet of het slaat op &amp;quot;remaining&amp;quot; (bijvoorbeeld als je dingen indeelt in groepjes) of het slaat op &amp;quot;other&amp;quot; (bijvoorbeeld als je omschrijvingen geeft aan dingen). Om dit euvel te verhelpen, kun je hints neerzetten in de vertaalbare strings, die betekenissen moeten verduidelijken en ontwarren. Dan kun je bijvoorbeeld &amp;lt;code&amp;gt;_('[VOC: niet in voorgaande lijstjes]overig')&amp;lt;/code&amp;gt; of juist &amp;lt;code&amp;gt;_('[VOC: functie commissielid]overig')&amp;lt;/code&amp;gt; neerzetten. Op zo'n zelfde manier kun je stringinterpolaties verduidelijken: in plaats van &amp;lt;code&amp;gt;_(&amp;quot;Deze persoon %s!&amp;quot;)&amp;lt;/code&amp;gt; schrijf je dan &amp;lt;code&amp;gt;_(&amp;quot;Deze persoon %s[VOC: redenen dat persoon niet verwijderd mag worden]!&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Het update-script zorgt er meteen voor dat de hints worden weggefilterd, dus er is geen enkele reden om het niet te doen!&lt;br /&gt;
&lt;br /&gt;
== Voor de PromoCie ==&lt;br /&gt;
&lt;br /&gt;
SVN (Subversion) is een programma dat zorgt voor het versiebeheer van de vertaalbare strings. Ook houdt het (vaak) automatisch rekening met het mergen van verschillende versies en kan je makkelijk een oude versie terugzetten. Voor de onderstaande commando's heb je een terminal nodig.&lt;br /&gt;
&lt;br /&gt;
=== SVN Checkout ===&lt;br /&gt;
&lt;br /&gt;
Als je nog nooit strings hebt vertaald moet je eerst een SVN checkout doen via &amp;lt;code&amp;gt;svn checkout [https://www.a-eskwadraat.nl/svn/webredactie/ https://www.a-eskwadraat.nl/svn/webredactie/] webredactie&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVN Update ===&lt;br /&gt;
&lt;br /&gt;
Om je bestand up to date te maken gebruik je &amp;lt;code&amp;gt;svn up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierna kan je werken aan het bestand met behulp van het programma GTranslator via &amp;lt;code&amp;gt;gtranslator en_GB.po &amp;amp;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVN Commit ===&lt;br /&gt;
&lt;br /&gt;
Als je een wijziging hebt gedaan aan de vertaalbare strings (en hebt opgeslagen) moet je dit committen, zodat andere PromoCieleden er ook iets mee kunnen doen en zodat het op de website komt.&lt;br /&gt;
&lt;br /&gt;
Dit doe je via: &amp;lt;code&amp;gt;svn ci en_GB.po&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zorg wel dat je in de terminal eerst naar de juiste map gaat waar het bestand in staat.&lt;br /&gt;
&lt;br /&gt;
Het kan zijn dat SVN zeurt dat je geen EDITOR hebt ingesteld. In dat geval kan je in je .bashrc bestand de volgende regel toevoegen: &amp;lt;code&amp;gt;export EDITOR=nano&amp;lt;/code&amp;gt; of je geeft meteen een log message mee via &amp;lt;code&amp;gt;svn ci -m &amp;quot;blabla&amp;quot; en_GB.po&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVN Difference ===&lt;br /&gt;
&lt;br /&gt;
Om het verschil te zien tussen het vertaalbestand dat online staat en jouw bestand moet je svn diff gebruiken: &amp;lt;code&amp;gt;svn diff en_GB.po&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SVN Status ===&lt;br /&gt;
&lt;br /&gt;
Om te kijken welke bestanden gewijzigd zijn kan je SVN status gebruiken via &amp;lt;code&amp;gt;svn st&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als het goed is is alleen en_GB.po gewijzigd.&lt;br /&gt;
&lt;br /&gt;
=== Overig ===&lt;br /&gt;
&lt;br /&gt;
*Als je je bestand wilt terugzetten naar de versie die op de server staat gebruik je: &amp;lt;code&amp;gt;svn revert en_GB.po&amp;lt;/code&amp;gt;&lt;br /&gt;
*Als je een conflict krijgt betekent dat dat je versie botst met die van een andere webredacteur. Je kan dan het conflict bekijken via &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; en vervolgens jouw versie accepteren (&amp;lt;code&amp;gt;mc&amp;lt;/code&amp;gt;) of de andere versie (&amp;lt;code&amp;gt;tc&amp;lt;/code&amp;gt;).&lt;br /&gt;
[[Category:WebCie]] [[Category:Webredactie]]&lt;br /&gt;
&lt;br /&gt;
== Waarom bestaat nl_NL.po? ==&lt;br /&gt;
&lt;br /&gt;
Uit een mailtje overgenomen:&lt;br /&gt;
&lt;br /&gt;
Het is natuurlijk voor de vertalingen heel lastig als een vertaalbare string meerdere Engelse vertalingen heeft, of dat je geen idee hebt waar alle %s'jes en %d'tjes voor staan. Om jullie een beetje te ondersteunen, gaan we de Nederlandse strings niet direct uit de code halen, maar net als het Engels &amp;quot;vertalen&amp;quot; uit de strings die al in de code staan. Dit komt neer op een tweede bestand, nl_NL.po, die in principe niets interessants bevat. Alleen als we een vertaalbare string tegenkomen die voor verwarring zorgt, kunnen we er een opmerking aan toevoegen (zodat &amp;quot;overig&amp;quot; wordt van de vorm &amp;quot;[VOC: functie commissielid]overig&amp;quot;, of &amp;quot;Deze persoon %s!&amp;quot; wordt &amp;quot;Deze persoon %s[VOC: redenen dat persoon niet verwijderd mag worden]!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Een ander voordeel is dat je in de nl_NL.po heel snel, zonder de code te hoeven aanpassen, spellingsfouten in de Nederlandse website kan oplossen. Bovendien zijn alle lijntjes heel makkelijk halfkast te maken, zonder dat PHP zich zorgen hoeft te maken over vage Unicodetekens.&lt;br /&gt;
&lt;br /&gt;
Het update-script gaat al die [VOC]-opmerkingen automatisch wegfilteren dus de nl_NL.po hoeft geen extra werk te kosten, en in de en_GB.po kunnen jullie vertalen zoals gewoonlijk, met extra hints. (Ze worden ook in en_GB.po weggefilterd, zodat de eindgebruiker ze nooit te zien krijgt!) Het fijne aan deze aanpak is dat jullie niets extra's hoeven te doen als jullie de huidige situatie met alleen de en_GB.po voldoende vinden, maar als iets goed is, kan het altijd beter, toch?&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Website-Ipa-integratie</id>
		<title>Website-Ipa-integratie</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Website-Ipa-integratie"/>
				<updated>2017-10-09T21:10:09Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Grammatica, Pepijn!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:WebCie]]&lt;br /&gt;
[[Category:Sysop]]&lt;br /&gt;
&lt;br /&gt;
Op dit moment wordt er gewerkt aan een website-ipa-integratie. Dat houdt in dat als commissieleden op de website in een commissie gestopt worden, het automatisch ook op het systeem gebeurt.&lt;br /&gt;
&lt;br /&gt;
Om dit allemaal mogelijk te maken moeten er een aantal dingen geregeld zijn:&lt;br /&gt;
&lt;br /&gt;
Alle scripts die gebruikt worden (op dit moment changecieforward, changeciesymlink, createciehomedir en makemensjehomedir) moeten in /usr/local/bin op de vm-www en vm-www-debug staan en de selinux-permissies moeten goed staan! Ook moeten op beide machines dezelfde skel-directory staan als op de workstations. In IPA moet geregeld worden dat apache deze commando's mag uitvoeren met sudo (als cies of mensje of wat van toepassing is). Verder moet er een gebruiker website-ipa zijn in ipa die de juiste rechten heeft om de juiste handelingen te doen. Van deze gebruiker wordt er een keytab-file opgeslagen op de vm-www en vm-www-debug die gebruikt wordt om de juiste ipa-commands uit te voeren. Verder is het ook belangrijk dat in /etc/sudoers (editten met visudo) de regel&lt;br /&gt;
 Defaults:apache !requiretty&lt;br /&gt;
komt te staan.&lt;br /&gt;
&lt;br /&gt;
Omdat veel IPA-scripts relative lange tijd kosten om te draaien worden op de website bij de pagina's die nieuwe accounts aanmaken (zowel cies als mensjes) de verschillende onderdelen met ajax aangeroepen. Hierdoor kan het zijn dat een van de scriptjes het niet doet wat problemen oplevert. Alle foutmeldingen moeten wel goed afgevangen worden om de 'normale' bestuursleden enig inzage te geven in wat er mis gaat.&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	<entry>
		<id>https://mediawiki.a-eskwadraat.nl/wiki/index.php/Website_stuk_wat_nu</id>
		<title>Website stuk wat nu</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.a-eskwadraat.nl/wiki/index.php/Website_stuk_wat_nu"/>
				<updated>2017-10-09T21:08:55Z</updated>
		
		<summary type="html">&lt;p&gt;Daanr: Oeps, begin een beetje moe te worden...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Debug is wit scherm na pullen==&lt;br /&gt;
&lt;br /&gt;
Probeer eens &amp;lt;code&amp;gt;manage update&amp;lt;/code&amp;gt; te doen om alle dependencies weer in het gareel te krijgen.&lt;br /&gt;
&lt;br /&gt;
==503 service unavailable==&lt;br /&gt;
&lt;br /&gt;
Krijg je een error als:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Service Temporarily Unavailable&lt;br /&gt;
&lt;br /&gt;
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.&lt;br /&gt;
Apache/2.2.15 (CentOS) Server at comint-debug.a-eskwadraat.nl Port 80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check dan of de server en/of PHP wel draaien:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo service httpd status&lt;br /&gt;
sudo service php-fpm status&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
en zo nee, start ze:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo service httpd start&lt;br /&gt;
sudo service php-fpm start&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Andere errors ==&lt;br /&gt;
&lt;br /&gt;
Heb je al geprobeerd te herstarten? Weet je zeker dat de stekker erin zit?&lt;br /&gt;
&lt;br /&gt;
[[Category:WebCie]]&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Daanr</name></author>	</entry>

	</feed>