<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sam+Hocevar</id>
	<title>VideoLAN Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.videolan.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sam+Hocevar"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Sam_Hocevar/"/>
	<updated>2026-11-04T15:53:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VideoLAN_Team&amp;diff=15529</id>
		<title>VideoLAN Team</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VideoLAN_Team&amp;diff=15529"/>
		<updated>2010-02-14T11:28:59Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: hide User prefix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to help to know who&#039;s who.&lt;br /&gt;
&lt;br /&gt;
You don&#039;t have to have a SVN write access to put your name here. If you hang out frequently on irc or on the forum write your name here.&lt;br /&gt;
&lt;br /&gt;
(should probably be merged with http://www.videolan.org/team/index.html )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; You can add yourself to the list following alphabetical order.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ VideoLAN Team&lt;br /&gt;
! align=left width=200 | Real name !! align=left width=100 | IRC Nick !!align=left width=100| SVN login !! align=left width=100 | wiki login !!align=left width=100 | Forum login !!&lt;br /&gt;
|-&lt;br /&gt;
| Filippo Carone || littlejohn || littlejohn || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Rafaël Carré || funman || funman || [[User:Funman|Funman]] || funman&lt;br /&gt;
|-&lt;br /&gt;
| Antoine Cellerier || dionoea || dionoea || [[User:Dionoea|Dionoea]] || dionoea&lt;br /&gt;
|-&lt;br /&gt;
| Jerome Decoodt || DiDjCodt || djc || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont || courmish || courmish || [[User:Courmisch|Courmisch]] || Rémi Denis-Courmont&lt;br /&gt;
|-&lt;br /&gt;
| Pierre d&#039;Herbemont || pdherbemont || pdherbemont || [[User:Pdherbemont|Pdherbemont]] || pdherbemont&lt;br /&gt;
|-&lt;br /&gt;
| Damien Fouilleul || Quovodis || damienf || [[User: Quovodis|Quovodis]] || ?&lt;br /&gt;
|-&lt;br /&gt;
| Sam Hocevar || sam || sam || [[User:Sam Hocevar|Sam Hocevar]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Jean-Baptiste Kempf || j-b || jb || [[User:J-b|J-b]] || j-b&lt;br /&gt;
|-&lt;br /&gt;
| Pavlov Konstantin || thresh || thresh || [[User: Thresh|Thresh]] || thresh&lt;br /&gt;
|-&lt;br /&gt;
| Felix Paul Kühne || feepk || fkuehne || [[User:Fkuehne|Fkuehne]] || feepk&lt;br /&gt;
|-&lt;br /&gt;
| Christophe Massiot || Meuuh || meuuh || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Christophe Mutricy || xtophe || xtophe || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Ilkka Ollakka || ILEoo || ileoo || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Faustino Osuna || riquedafreak || riquedafreak || [[User:Riquedafreak|Riquedafreak]] || riquedafreak&lt;br /&gt;
|-&lt;br /&gt;
| Yoann Peronneau || yoannp || yoann || [[User: Yoann|Yoann]] || yoann&lt;br /&gt;
|-&lt;br /&gt;
| Bernie Purcel || ? || bitmap || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Jean-Paul Saman || jpsaman || jpsaman || [[User: jpsaman|jpsaman]] || jpsaman&lt;br /&gt;
|-&lt;br /&gt;
| Clément Stenac || zorglub || zorglub || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Olivier Teulière || ipkiss || ipkiss || [[User:Ipkiss|Ipkiss]] || ipkiss&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=VideoLAN_Team&amp;diff=15528</id>
		<title>VideoLAN Team</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=VideoLAN_Team&amp;diff=15528"/>
		<updated>2010-02-14T11:28:32Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: my wiki login&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to help to know who&#039;s who.&lt;br /&gt;
&lt;br /&gt;
You don&#039;t have to have a SVN write access to put your name here. If you hang out frequently on irc or on the forum write your name here.&lt;br /&gt;
&lt;br /&gt;
(should probably be merged with http://www.videolan.org/team/index.html )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; You can add yourself to the list following alphabetical order.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ VideoLAN Team&lt;br /&gt;
! align=left width=200 | Real name !! align=left width=100 | IRC Nick !!align=left width=100| SVN login !! align=left width=100 | wiki login !!align=left width=100 | Forum login !!&lt;br /&gt;
|-&lt;br /&gt;
| Filippo Carone || littlejohn || littlejohn || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Rafaël Carré || funman || funman || [[User:Funman|Funman]] || funman&lt;br /&gt;
|-&lt;br /&gt;
| Antoine Cellerier || dionoea || dionoea || [[User:Dionoea|Dionoea]] || dionoea&lt;br /&gt;
|-&lt;br /&gt;
| Jerome Decoodt || DiDjCodt || djc || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Rémi Denis-Courmont || courmish || courmish || [[User:Courmisch|Courmisch]] || Rémi Denis-Courmont&lt;br /&gt;
|-&lt;br /&gt;
| Pierre d&#039;Herbemont || pdherbemont || pdherbemont || [[User:Pdherbemont|Pdherbemont]] || pdherbemont&lt;br /&gt;
|-&lt;br /&gt;
| Damien Fouilleul || Quovodis || damienf || [[User: Quovodis|Quovodis]] || ?&lt;br /&gt;
|-&lt;br /&gt;
| Sam Hocevar || sam || sam || [[User:Sam Hocevar]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Jean-Baptiste Kempf || j-b || jb || [[User:J-b|J-b]] || j-b&lt;br /&gt;
|-&lt;br /&gt;
| Pavlov Konstantin || thresh || thresh || [[User: Thresh|Thresh]] || thresh&lt;br /&gt;
|-&lt;br /&gt;
| Felix Paul Kühne || feepk || fkuehne || [[User:Fkuehne|Fkuehne]] || feepk&lt;br /&gt;
|-&lt;br /&gt;
| Christophe Massiot || Meuuh || meuuh || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Christophe Mutricy || xtophe || xtophe || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Ilkka Ollakka || ILEoo || ileoo || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Faustino Osuna || riquedafreak || riquedafreak || [[User:Riquedafreak|Riquedafreak]] || riquedafreak&lt;br /&gt;
|-&lt;br /&gt;
| Yoann Peronneau || yoannp || yoann || [[User: Yoann|Yoann]] || yoann&lt;br /&gt;
|-&lt;br /&gt;
| Bernie Purcel || ? || bitmap || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Jean-Paul Saman || jpsaman || jpsaman || [[User: jpsaman|jpsaman]] || jpsaman&lt;br /&gt;
|-&lt;br /&gt;
| Clément Stenac || zorglub || zorglub || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| Olivier Teulière || ipkiss || ipkiss || [[User:Ipkiss|Ipkiss]] || ipkiss&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=14518</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=14518"/>
		<updated>2009-07-18T11:32:32Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: /* Getting VLC or x264 source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Basic Git usage =&lt;br /&gt;
&lt;br /&gt;
If you are using &#039;&#039;&#039;Windows&#039;&#039;&#039;, please read the [[Git_Windows]] page.&lt;br /&gt;
&lt;br /&gt;
== Getting VLC or x264 source code via Git ==&lt;br /&gt;
 &lt;br /&gt;
 $ git clone git://git.videolan.org/vlc.git&lt;br /&gt;
Voilà! The full VLC history should be on your hard disk in vlc/.&lt;br /&gt;
&lt;br /&gt;
 $ git clone git://git.videolan.org/x264.git&lt;br /&gt;
Voilà! The full x264 history should be on your hard disk in x264/.&lt;br /&gt;
&lt;br /&gt;
If you want only the last 3 VLC revisions:&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc.git --depth 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with our repo.or.cz mirror.&lt;br /&gt;
 $ git clone http://repo.or.cz/r/vlc.git&lt;br /&gt;
&lt;br /&gt;
 $ git log&lt;br /&gt;
to see the full log of the trunk.&lt;br /&gt;
 $ gitk&lt;br /&gt;
to see the log graphically.&lt;br /&gt;
&lt;br /&gt;
You can also browse the sources via [http://git.videolan.org/ gitweb].&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&lt;br /&gt;
May need to use &lt;br /&gt;
$ git repo-config {various options} &lt;br /&gt;
1.4.4.2 Requires the repo-config command rather than just config&lt;br /&gt;
&lt;br /&gt;
=== Personal Information ===&lt;br /&gt;
Tell git your name. (use mostly by git-commit)&lt;br /&gt;
 $ git config --global user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config --global user.email &amp;quot;me@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Using git with color (Tip) ===&lt;br /&gt;
If you want to use git with colored output use:&lt;br /&gt;
 $ git config --global color.ui true&lt;br /&gt;
&lt;br /&gt;
If you are using an old git version (prior to 1.5.5) and previous command didn&#039;t work, use:&lt;br /&gt;
 $ git config --global color.diff auto&lt;br /&gt;
 $ git config --global color.status auto&lt;br /&gt;
 $ git config --global color.branch auto&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git up&amp;quot; (Tip) ===&lt;br /&gt;
If you want to be able to just keep in sync using &amp;quot;git up&amp;quot; use:&lt;br /&gt;
 $ git config --global alias.up &amp;quot;pull --rebase&amp;quot;&lt;br /&gt;
And if you like your tree to be messy and don&#039;t want git to complain (like in svn) use:&lt;br /&gt;
 $ git config --global alias.up &#039;!sh -c &amp;quot;git commit -a -m &amp;quot;Before rebase&amp;quot; &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git reset head^&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git wu&amp;quot; (Git What&#039;s Up) (Tip) ===&lt;br /&gt;
If you want to see what you are about to &amp;quot;git push&amp;quot;:&lt;br /&gt;
 $ git config --global alias.wu &amp;quot;log --stat origin..@{0}&amp;quot;&lt;br /&gt;
Now use:&lt;br /&gt;
 $ git wu&lt;br /&gt;
&lt;br /&gt;
=== Setting up &amp;quot;git wup&amp;quot; (Git What&#039;s Up - with patch) (Tip) ===&lt;br /&gt;
If you want to see what you are about to &amp;quot;git push&amp;quot;, along with the diff:&lt;br /&gt;
 $ git config --global alias.wup &amp;quot;log -p origin..@{0}&amp;quot;&lt;br /&gt;
Now use:&lt;br /&gt;
 $ git wup&lt;br /&gt;
&lt;br /&gt;
== General GIT Workflow ==&lt;br /&gt;
1.  Make your file edits in your local repository.&lt;br /&gt;
&lt;br /&gt;
2.  &amp;quot;git commit&amp;quot;      the changes in your local repository&lt;br /&gt;
&lt;br /&gt;
3.  &amp;quot;git pull --rebase&amp;quot;  or &amp;quot;git up&amp;quot; (if you did &#039;&#039;git config --global alias.up &amp;quot;pull --rebase&amp;quot;&#039;&#039;) to bring the rest of your local repository up to date&lt;br /&gt;
&lt;br /&gt;
4.  &amp;quot;git log origin..master&amp;quot;    to check what you are going to commit&lt;br /&gt;
&lt;br /&gt;
4.  &amp;quot;git push&amp;quot;    to move your changes up to the master&lt;br /&gt;
&lt;br /&gt;
&amp;quot;git stash&amp;quot;    if you want to &amp;quot;hide&amp;quot; your changes.  Do this if you think there may be other commits against the same things you are working on and want to refresh your local checkout (using a git pull --rebase) from the master. Use &amp;quot;git stash apply&amp;quot; to get your stash back. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;git checkout -f master&amp;quot;     if you think your tree is pretty hopeless, need a kill-and-fill to bring the master into your local repository.&lt;br /&gt;
&lt;br /&gt;
== List the local branch ==&lt;br /&gt;
You can now list your local branch by doing&lt;br /&gt;
 $ git branch&lt;br /&gt;
which should ouput&lt;br /&gt;
 $ git branch&lt;br /&gt;
 * master&lt;br /&gt;
&lt;br /&gt;
== List your local non committed changes ==&lt;br /&gt;
 $ git status | less&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Now you can start to work on your tree. As soon as you feel you have reached a step in developement where you can commit your work &#039;&#039;&#039;locally&#039;&#039;&#039;, use&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
or&lt;br /&gt;
 $ git commit &amp;lt;specific files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wish to give credit to someone else&#039;s work (e.g. you are applying a third party patch):&lt;br /&gt;
 $ git commit &amp;lt;specific files&amp;gt; --author &amp;quot;Name Surname &amp;lt;user@domain.com&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== List your commits ==&lt;br /&gt;
 $ git log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keeping your local working branch in sync ==&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
&lt;br /&gt;
To shorten up that command type&lt;br /&gt;
 $ git config --global alias.up &amp;quot;pull --rebase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now you can just type:&lt;br /&gt;
 $ git up&lt;br /&gt;
&lt;br /&gt;
== Use a graphical interface ==&lt;br /&gt;
 $ gitk          # Tree Browser&lt;br /&gt;
 $ qgit          # Tree Browser&lt;br /&gt;
 $ git-gui       # Commit/push/... editor&lt;br /&gt;
&lt;br /&gt;
== Submitting patches to the vlc-devel or x264-devel ==&lt;br /&gt;
&lt;br /&gt;
First make sure you have &#039;&#039;&#039;read&#039;&#039;&#039; our [[Sending Patches]] page. And that you&#039;ve &#039;&#039;&#039;read&#039;&#039;&#039; the [[Sending Patches#Check_List| Check List]].&lt;br /&gt;
&lt;br /&gt;
If you have been developing on vlc locally and (still) don&#039;t have write access, you can submit all your commits in one shot using:&lt;br /&gt;
 $ rm -Rf patches&lt;br /&gt;
 $ git format-patch -o patches origin&lt;br /&gt;
 $ git-send-email --to vlc-devel@videolan.org patches&lt;br /&gt;
If you have multiple patch consider using:&lt;br /&gt;
 $ git-send-email --compose --no-chain-reply-to --to vlc-devel@videolan.org patches&lt;br /&gt;
This will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
Use --no-chain-reply-to make sure it doesn&#039;t reply.&lt;br /&gt;
&lt;br /&gt;
For x264, do the same with x264-devel@videolan.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- what does the following mean? --&amp;gt;&lt;br /&gt;
Don&#039;t do:&lt;br /&gt;
* [PATCH 0/m]&lt;br /&gt;
** [PATCH 1/m]&lt;br /&gt;
*** [PATCH 2/m]&lt;br /&gt;
**** ...&lt;br /&gt;
But do:&lt;br /&gt;
* [PATCH 0/m]&lt;br /&gt;
** [PATCH 1/m]&lt;br /&gt;
** [PATCH 2/m]&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
= Advanced usage =&lt;br /&gt;
== Creating a secondary local branch ==&lt;br /&gt;
If you want to work on a specific project that could require a branch of the trunk, create a local branch of the current branch by doing:&lt;br /&gt;
 $ git branch mywork&lt;br /&gt;
and to actually use it do:&lt;br /&gt;
 $ git checkout mywork&lt;br /&gt;
Which could be summarized by:&lt;br /&gt;
 $ git checkout -b mywork&lt;br /&gt;
&lt;br /&gt;
Then do some commit on it... And you can go back to your original master branch by doing:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
== Fetching a remote branch ==&lt;br /&gt;
To see the remote branch use:&lt;br /&gt;
 $ git branch -r&lt;br /&gt;
If the remote branch is named 0.8.6-bugfix&lt;br /&gt;
 $ git branch 0.8.6-bugfix origin/0.8.6-bugfix &lt;br /&gt;
 Branch 0.8.6-bugfix set up to track remote branch refs/remotes/origin/0.8.6-bugfix.&lt;br /&gt;
 $ git branch&lt;br /&gt;
  0.8.6-bugfix&lt;br /&gt;
  * master&lt;br /&gt;
To checkout that branch use:&lt;br /&gt;
 $ git checkout 0.8.6-bugfix&lt;br /&gt;
To stay up-to-date a simple&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
Should be enough.&lt;br /&gt;
&lt;br /&gt;
If warnings appear that files still need updating:&lt;br /&gt;
 $ include/libvlc_internal.h: needs update&lt;br /&gt;
   include/mediacontrol_internal.h: needs update&lt;br /&gt;
   include/vlc/libvlc.h: needs update&lt;br /&gt;
   include/vlc_update.h: needs update&lt;br /&gt;
   modules/access/mms/mms.c: needs update&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
Then do a checkout -f to revert non committed local changes&lt;br /&gt;
 $ git checkout -f&lt;br /&gt;
&lt;br /&gt;
To stay up-to-date another&lt;br /&gt;
 $ git pull --rebase&lt;br /&gt;
Should give no more warnings.&lt;br /&gt;
&lt;br /&gt;
To push to the remote branch, use:&lt;br /&gt;
 $git push origin 0.8.6-bugfix:0.8.6-bugfix&lt;br /&gt;
&lt;br /&gt;
== Creating a remote branch ==&lt;br /&gt;
If the new remote branch is named 0.9.0-bugfix, and is based on the local master branch.&lt;br /&gt;
First make sure everything go as planned with the --dry-run option:&lt;br /&gt;
 $ git push --dry-run origin master:refs/heads/0.9.0-stable&lt;br /&gt;
 To git@git.videolan.org:vlc.git&lt;br /&gt;
 * [new branch]      master -&amp;gt; 0.9.0-stable&lt;br /&gt;
&lt;br /&gt;
Then push it:&lt;br /&gt;
 $ git push origin master:refs/heads/0.9.0-stable&lt;br /&gt;
 To git@git.videolan.org:vlc.git&lt;br /&gt;
 * [new branch]      master -&amp;gt; 0.9.0-stable&lt;br /&gt;
 $ git branch -r&lt;br /&gt;
  origin/0.9.0-stable&lt;br /&gt;
  origin/master&lt;br /&gt;
&lt;br /&gt;
To checkout that branch now see &#039;&#039;Fetching a remote branch&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Publishing your own fork ==&lt;br /&gt;
Goto [http://repo.or.cz/w/vlc.git http://repo.or.cz/w/vlc.git] and click [http://repo.or.cz/m/regproj.cgi?name=vlc/ fork]. You will be able to publish your work there.&lt;br /&gt;
&lt;br /&gt;
Please don&#039;t forget to send a mail to the vlc-devel as soon as you create your fork.&lt;br /&gt;
&lt;br /&gt;
== Revert your non-committed local changes ==&lt;br /&gt;
 $ git checkout -f&lt;br /&gt;
&lt;br /&gt;
==Edit or undo not yet pushed commits ==&lt;br /&gt;
This will undo the last commit&lt;br /&gt;
 $ git reset HEAD^&lt;br /&gt;
which is the same as&lt;br /&gt;
 $ git reset master^&lt;br /&gt;
(if your checked-out copy of your tree is master)&lt;br /&gt;
And also the same as&lt;br /&gt;
 $ git reset a44a594 # note that there is no need to use the full sha id&lt;br /&gt;
&lt;br /&gt;
If you have a stack of patch that you have not yet committed you can delete one patch from the list using git rebase --interactive&lt;br /&gt;
 $ git rebase --interactive origin&lt;br /&gt;
  pick eacf185 test&lt;br /&gt;
  pick 56322eb VLMA owner is vlma prod.&lt;br /&gt;
 &lt;br /&gt;
  # Rebase 826757e..56322eb onto 826757e&lt;br /&gt;
  #&lt;br /&gt;
  # Commands:&lt;br /&gt;
  #  pick = use commit&lt;br /&gt;
  #  edit = use commit, but stop for amending&lt;br /&gt;
  #  squash = use commit, but meld into previous commit&lt;br /&gt;
&lt;br /&gt;
== Diff-ing ==&lt;br /&gt;
* You can diff between two branches using&lt;br /&gt;
 $ git diff branch1 branch2&lt;br /&gt;
* You can diff between the previous 10th commit and current using&lt;br /&gt;
 $ git diff HEAD~10 HEAD&lt;br /&gt;
* You can diff between the previous 10th commit and current of the branch &amp;quot;mywork&amp;quot; using&lt;br /&gt;
 $ git diff mywork~10 mywork&lt;br /&gt;
* Imagine that git log is like&lt;br /&gt;
 $ git log&lt;br /&gt;
 commit e0394f269305edd09843257e7c1d1a66aaf48ab3&lt;br /&gt;
 Author: jb &amp;lt;jb&amp;gt;&lt;br /&gt;
 Date:   Fri Apr 13 07:14:48 2007 +0000&lt;br /&gt;
    qt4 - Mousewheel (2)&lt;br /&gt;
 commit e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
 [..]&lt;br /&gt;
 commit ff7004b70fd239e4120deb160e2991bd5237b8df&lt;br /&gt;
 [..]&lt;br /&gt;
 commit a44a594898f981a145cfcace5f16f8973f9eb46f&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 690df705c963cf6bf6f5746d54bc97a85ff91919&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 679f8b1c3e0baa469efa970588b95a625c595d64&lt;br /&gt;
 [..]&lt;br /&gt;
&lt;br /&gt;
 $ git diff a44a594898f981a145cfcace5f16f8973f9eb46f~2 e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
Will be equivalent to:&lt;br /&gt;
 $ git diff ff7004b70fd239e4120deb160e2991bd5237b8df e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
And to:&lt;br /&gt;
 $ git diff HEAD~4 HEAD^&lt;br /&gt;
&lt;br /&gt;
* Remember that to produce a patch you should rather use git-format-patch than git-diff most of the time.&lt;br /&gt;
&lt;br /&gt;
== Patch-ing ==&lt;br /&gt;
* You can apply patches using&lt;br /&gt;
 $ git apply &amp;lt;patch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tracking regression ==&lt;br /&gt;
git has a great tool called [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect] to help you to track a faulty commit. Imagine you are tracking a bug that is known to appear after 0.8.6 (assuming 0.8.6 is tagged):&lt;br /&gt;
 $ git bisect start&lt;br /&gt;
 $ git bisect bad # tell git current version has the bug you are tracking&lt;br /&gt;
 $ git bisect good 0.8.6 # tell git 0.8.6 didn&#039;t has the bug&lt;br /&gt;
And then git will checkout a certain revision, and ask you to test it. And you simply say whether this version has the bug.&lt;br /&gt;
If it has the bug:&lt;br /&gt;
 $ git bisect bad&lt;br /&gt;
if the bug is not present:&lt;br /&gt;
 $ git bisect good&lt;br /&gt;
And so on by bisection... At the end git will indicate the faulty commit. Most of the time this tool is really efficient to track regression.&lt;br /&gt;
&lt;br /&gt;
If you can provide a script that test the presence of the bug &lt;br /&gt;
 $ git bisect run &amp;lt;script_name&amp;gt;&lt;br /&gt;
will be able to track down the regression by itself. See [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect Documentation].&lt;br /&gt;
&lt;br /&gt;
= Using Git to push to VideoLAN git =&lt;br /&gt;
== Initial requirement ==&lt;br /&gt;
* Make sure you&#039;ve set your name and email in your commits&lt;br /&gt;
 $ git config --global user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config --global user.email &amp;quot;me@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Convert your tree to use your ssh push commit access ==&lt;br /&gt;
 $ vi vlc/.git/config&lt;br /&gt;
And replace git://git.videolan.org/vlc.git by git@git.videolan.org:vlc.git&lt;br /&gt;
&lt;br /&gt;
== Staying up to date ==&lt;br /&gt;
  $ git pull --rebase&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to have to type --rebase everytime you pull do:&lt;br /&gt;
 $ git config branch.master.rebase true&lt;br /&gt;
&lt;br /&gt;
This one creates a merge object which is not how SVN worked, so let&#039;s use the first version...&lt;br /&gt;
  $ git pull&lt;br /&gt;
&lt;br /&gt;
== Pushing your work ==&lt;br /&gt;
  $ git log origin..master     # Check what you are going to push&lt;br /&gt;
  $ git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- GSoC 2007&lt;br /&gt;
= Using Git to publish your work (for SoC student?) =&lt;br /&gt;
First get the official VLC &#039;&#039;&#039;Soc&#039;&#039;&#039; trunk&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc-soc.git&lt;br /&gt;
 $ cd vlc-soc&lt;br /&gt;
Ask for write access to a branch (called your_name_branch). Now we will make git know that you want to publish on this branch&lt;br /&gt;
 $ git config remote.my_soc_public_branch.url ssh://your_name@altair.videolan.org/home/videolan/gitroot/vlc-soc.git&lt;br /&gt;
Now tell git that you want to automatically push the local master branch to the public your_name_branch:&lt;br /&gt;
 $ git config remote.my_soc_public_branch.push +master:your_name_branch # the &amp;quot;+&amp;quot; will tell git to force update ignoring conflicts&lt;br /&gt;
&lt;br /&gt;
Do some work and commit it to your master branch.&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
You can also sync with the trunk (origin) as needed&lt;br /&gt;
 $ git pull --rebase origin&lt;br /&gt;
And don&#039;t forget to publish your changes:&lt;br /&gt;
 $ git push my_soc_public_branch&lt;br /&gt;
Now you should be able to see your latest changes in your branch via [http://git.videolan.org/ gitweb].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Documentation about git =&lt;br /&gt;
* [http://git.or.cz/ Official Git Website]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/tutorial.html Git Tutorial]&lt;br /&gt;
* [http://git.or.cz/course/svn.html Switching from SVN to git using cogito]&lt;br /&gt;
* [http://wiki.sourcemage.org/Git_Guide Very good Git guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=LibVLC_SampleCode_SDL&amp;diff=11047</id>
		<title>LibVLC SampleCode SDL</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=LibVLC_SampleCode_SDL&amp;diff=11047"/>
		<updated>2008-03-21T23:14:12Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: cool libSDL/libVLC example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This sample code will render a video into an SDL surface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: this requires the &amp;quot;vmem&amp;quot; video output which was checked in on March 21st, 2008.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* libSDL and libVLC sample code&lt;br /&gt;
 * Copyright © 2008 Sam Hocevar &amp;lt;sam@zoy.org&amp;gt;&lt;br /&gt;
 * license: [http://en.wikipedia.org/wiki/WTFPL WTFPL] */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL_mutex.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;vlc/libvlc.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define WIDTH 640&lt;br /&gt;
#define HEIGHT 480&lt;br /&gt;
&lt;br /&gt;
#define VIDEOWIDTH 320&lt;br /&gt;
#define VIDEOHEIGHT 240&lt;br /&gt;
&lt;br /&gt;
struct ctx&lt;br /&gt;
{&lt;br /&gt;
    SDL_Surface *surf;&lt;br /&gt;
    SDL_mutex *mutex;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static void catch (libvlc_exception_t *ex)&lt;br /&gt;
{&lt;br /&gt;
    if(libvlc_exception_raised(ex))&lt;br /&gt;
    {&lt;br /&gt;
        fprintf(stderr, &amp;quot;exception: %s\n&amp;quot;, libvlc_exception_get_message(ex));&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    libvlc_exception_clear(ex);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void * lock(struct ctx *ctx)&lt;br /&gt;
{&lt;br /&gt;
    SDL_LockMutex(ctx-&amp;gt;mutex);&lt;br /&gt;
    SDL_LockSurface(ctx-&amp;gt;surf);&lt;br /&gt;
    return ctx-&amp;gt;surf-&amp;gt;pixels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void unlock(struct ctx *ctx)&lt;br /&gt;
{&lt;br /&gt;
    /* VLC just rendered the video, but we can also render stuff */&lt;br /&gt;
    uint16_t *pixels = (uint16_t *)ctx-&amp;gt;surf-&amp;gt;pixels;&lt;br /&gt;
    int x, y;&lt;br /&gt;
&lt;br /&gt;
    for(y = 10; y &amp;lt; 40; y++)&lt;br /&gt;
        for(x = 10; x &amp;lt; 40; x++)&lt;br /&gt;
            if(x &amp;lt; 13 || y &amp;lt; 13 || x &amp;gt; 36 || y &amp;gt; 36)&lt;br /&gt;
                pixels[y * VIDEOWIDTH + x] = 0xffff;&lt;br /&gt;
            else&lt;br /&gt;
                pixels[y * VIDEOWIDTH + x] = 0x0;&lt;br /&gt;
&lt;br /&gt;
    SDL_UnlockSurface(ctx-&amp;gt;surf);&lt;br /&gt;
    SDL_UnlockMutex(ctx-&amp;gt;mutex);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
    char clock[64], cunlock[64], cdata[64];&lt;br /&gt;
    char width[32], height[32], pitch[32];&lt;br /&gt;
    libvlc_exception_t ex;&lt;br /&gt;
    libvlc_instance_t *libvlc;&lt;br /&gt;
    libvlc_media_descriptor_t *md;&lt;br /&gt;
    libvlc_media_instance_t *mi;&lt;br /&gt;
    char const *vlc_argv[] =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;-q&amp;quot;,&lt;br /&gt;
        //&amp;quot;-vvvvv&amp;quot;,&lt;br /&gt;
        &amp;quot;--plugin-path&amp;quot;, VLC_TREE &amp;quot;/modules&amp;quot;,&lt;br /&gt;
        &amp;quot;--noaudio&amp;quot;,&lt;br /&gt;
        &amp;quot;--vout&amp;quot;, &amp;quot;vmem&amp;quot;,&lt;br /&gt;
        &amp;quot;--vmem-width&amp;quot;, width,&lt;br /&gt;
        &amp;quot;--vmem-height&amp;quot;, height,&lt;br /&gt;
        &amp;quot;--vmem-pitch&amp;quot;, pitch,&lt;br /&gt;
        &amp;quot;--vmem-chroma&amp;quot;, &amp;quot;RV16&amp;quot;,&lt;br /&gt;
        &amp;quot;--vmem-lock&amp;quot;, clock,&lt;br /&gt;
        &amp;quot;--vmem-unlock&amp;quot;, cunlock,&lt;br /&gt;
        &amp;quot;--vmem-data&amp;quot;, cdata,&lt;br /&gt;
    };&lt;br /&gt;
    int vlc_argc = sizeof(vlc_argv) / sizeof(*vlc_argv);&lt;br /&gt;
&lt;br /&gt;
    SDL_Surface *screen, *empty;&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    SDL_Rect rect;&lt;br /&gt;
    int done = 0, action = 0, pause = 0, n = 0;&lt;br /&gt;
&lt;br /&gt;
    struct ctx ctx;&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     *  Initialise libSDL&lt;br /&gt;
     */&lt;br /&gt;
    if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTTHREAD) == -1)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;cannot initialize SDL\n&amp;quot;);&lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    empty = SDL_CreateRGBSurface(SDL_SWSURFACE, VIDEOWIDTH, VIDEOHEIGHT,&lt;br /&gt;
                                 32, 0, 0, 0, 0);&lt;br /&gt;
    ctx.surf = SDL_CreateRGBSurface(SDL_SWSURFACE, VIDEOWIDTH, VIDEOHEIGHT,&lt;br /&gt;
                                    16, 0x001f, 0x07e0, 0xf800, 0);&lt;br /&gt;
&lt;br /&gt;
    ctx.mutex = SDL_CreateMutex();&lt;br /&gt;
&lt;br /&gt;
    int options = SDL_ANYFORMAT | SDL_HWSURFACE | SDL_DOUBLEBUF;&lt;br /&gt;
&lt;br /&gt;
    screen = SDL_SetVideoMode(WIDTH, HEIGHT, 0, options);&lt;br /&gt;
    if(!screen)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;cannot set video mode\n&amp;quot;);&lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     *  Initialise libVLC&lt;br /&gt;
     */&lt;br /&gt;
    sprintf(clock, &amp;quot;%lld&amp;quot;, (long long int)(intptr_t)lock);&lt;br /&gt;
    sprintf(cunlock, &amp;quot;%lld&amp;quot;, (long long int)(intptr_t)unlock);&lt;br /&gt;
    sprintf(cdata, &amp;quot;%lld&amp;quot;, (long long int)(intptr_t)&amp;amp;ctx);&lt;br /&gt;
    sprintf(width, &amp;quot;%i&amp;quot;, VIDEOWIDTH);&lt;br /&gt;
    sprintf(height, &amp;quot;%i&amp;quot;, VIDEOHEIGHT);&lt;br /&gt;
    sprintf(pitch, &amp;quot;%i&amp;quot;, VIDEOWIDTH * 2);&lt;br /&gt;
&lt;br /&gt;
    if(argc &amp;lt; 2)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;too few arguments (MRL needed)\n&amp;quot;);&lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    libvlc_exception_init(&amp;amp;ex);&lt;br /&gt;
    libvlc = libvlc_new(vlc_argc, vlc_argv, &amp;amp;ex);&lt;br /&gt;
    catch(&amp;amp;ex);&lt;br /&gt;
    md = libvlc_media_descriptor_new(libvlc, argv[1], &amp;amp;ex);&lt;br /&gt;
    catch(&amp;amp;ex);&lt;br /&gt;
    mi = libvlc_media_instance_new_from_media_descriptor(md, &amp;amp;ex);&lt;br /&gt;
    catch(&amp;amp;ex);&lt;br /&gt;
    libvlc_media_descriptor_release(md);&lt;br /&gt;
&lt;br /&gt;
    libvlc_media_instance_play(mi, &amp;amp;ex);&lt;br /&gt;
    catch(&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     *  Main loop&lt;br /&gt;
     */&lt;br /&gt;
    rect.w = 0;&lt;br /&gt;
    rect.h = 0;&lt;br /&gt;
&lt;br /&gt;
    while(!done)&lt;br /&gt;
    { &lt;br /&gt;
        action = 0;&lt;br /&gt;
&lt;br /&gt;
        /* Keys: enter (fullscreen), space (pause), escape (quit) */&lt;br /&gt;
        while( SDL_PollEvent( &amp;amp;event ) ) &lt;br /&gt;
        { &lt;br /&gt;
            switch(event.type)&lt;br /&gt;
            {&lt;br /&gt;
            case SDL_QUIT:&lt;br /&gt;
                done = 1;&lt;br /&gt;
                break;&lt;br /&gt;
            case SDL_KEYDOWN:&lt;br /&gt;
                action = event.key.keysym.sym;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch(action)&lt;br /&gt;
        {&lt;br /&gt;
        case SDLK_ESCAPE:&lt;br /&gt;
            done = 1;&lt;br /&gt;
            break;&lt;br /&gt;
        case SDLK_RETURN:&lt;br /&gt;
            options ^= SDL_FULLSCREEN;&lt;br /&gt;
            screen = SDL_SetVideoMode(WIDTH, HEIGHT, 0, options);&lt;br /&gt;
            break;&lt;br /&gt;
        case &#039; &#039;:&lt;br /&gt;
            pause = !pause;&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        rect.x = (int)((1. + .5 * sin(0.03 * n)) * (WIDTH - VIDEOWIDTH) / 2);&lt;br /&gt;
        rect.y = (int)((1. + .5 * cos(0.03 * n)) * (HEIGHT - VIDEOHEIGHT) / 2);&lt;br /&gt;
&lt;br /&gt;
        if(!pause)&lt;br /&gt;
            n++;&lt;br /&gt;
&lt;br /&gt;
        /* Blitting the surface does not prevent it from being locked and&lt;br /&gt;
         * written to by another thread, so we use this additional mutex. */&lt;br /&gt;
        SDL_LockMutex(ctx.mutex);&lt;br /&gt;
        SDL_BlitSurface(ctx.surf, NULL, screen, &amp;amp;rect);&lt;br /&gt;
        SDL_UnlockMutex(ctx.mutex);&lt;br /&gt;
&lt;br /&gt;
        SDL_Flip(screen);&lt;br /&gt;
        SDL_Delay(10);&lt;br /&gt;
&lt;br /&gt;
        SDL_BlitSurface(empty, NULL, screen, &amp;amp;rect);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * Stop stream and clean up libVLC&lt;br /&gt;
     */&lt;br /&gt;
    libvlc_media_instance_stop(mi, &amp;amp;ex);&lt;br /&gt;
    catch(&amp;amp;ex);&lt;br /&gt;
&lt;br /&gt;
    libvlc_media_instance_release(mi);&lt;br /&gt;
    libvlc_release(libvlc);&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * Close window and clean up libSDL&lt;br /&gt;
     */&lt;br /&gt;
    SDL_DestroyMutex(ctx.mutex);&lt;br /&gt;
    SDL_FreeSurface(ctx.surf);&lt;br /&gt;
    SDL_FreeSurface(empty);&lt;br /&gt;
&lt;br /&gt;
    SDL_Quit();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=LibVLC&amp;diff=11046</id>
		<title>LibVLC</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=LibVLC&amp;diff=11046"/>
		<updated>2008-03-21T22:33:20Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: /* Sample Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase}}&lt;br /&gt;
You can embed libVLC into your application to gain audio/video playing features.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
Here are three different tutorials on libVLC:&lt;br /&gt;
* [[LibVLC_Visual_C++| Visual C++ Tutorial]] &#039;&#039; (uses &amp;quot;old&amp;quot; legacy API) &#039;&#039;&lt;br /&gt;
* [[LibVLC_Tutorial_086c| Tutorial for version 0.8.6c]]&lt;br /&gt;
* [[LibVLC_Tutorial|Tutorial for trunk version]]&lt;br /&gt;
&lt;br /&gt;
== Sample Code ==&lt;br /&gt;
* [[LibVLC_SampleCode_Thumbnailer|Generate thumbnails using LibVLC]]&lt;br /&gt;
* [[LibVLC_SampleCode_SDL|Use LibVLC in an SDL application]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* The documentation on the external API is here: [[ExternalAPI]]&lt;br /&gt;
This applies to current trunk version:&lt;br /&gt;
* On Mac OS X there you can use libvlc through some Objective-C class using the [[Mac OS X Framework]].&lt;br /&gt;
* Currently it exists Java, Python and .NET bindings around LibVLC.&lt;br /&gt;
* [[LibVLC_Memory_Management| LibVLC Memory Management]] explained. It covers the basics on the _new(), _retain(), _release().&lt;br /&gt;
* [[LibVLC_Media_List_Management| LibVLC Media List Management]] explained. It covers the basics on how to set up a list of media or a playlist.&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=10168</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=10168"/>
		<updated>2007-11-04T12:18:41Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: /* Initial checkout */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For your convenience, a git mirror of the VLC svn tree has been set up. Here is a tutorial on how to use the git VLC repository.&lt;br /&gt;
&lt;br /&gt;
You can read more about the VLC svn tree on our [[Subversion| Subversion wiki page]].&lt;br /&gt;
&lt;br /&gt;
= Basic Git usage =&lt;br /&gt;
== Getting VLC source code via Git ==&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc.git&lt;br /&gt;
Voilà! The full VLC history should be on your hard disk in vlc/. Type&lt;br /&gt;
 $ git log&lt;br /&gt;
to see the full log of the trunk.&lt;br /&gt;
 $ gitk&lt;br /&gt;
to see the log graphically.&lt;br /&gt;
&lt;br /&gt;
You can also browse the sources via [http://git.videolan.org/cgi-bin/gitweb.cgi gitweb].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure your local git repository ==&lt;br /&gt;
Tell git your name. (use mostly by git-commit)&lt;br /&gt;
 $ git repo-config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git repo-config user.email &amp;quot;me@example.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== List the local branch ==&lt;br /&gt;
You can now list your local branch by doing&lt;br /&gt;
 $ git branch&lt;br /&gt;
which should ouput&lt;br /&gt;
 $ git branch&lt;br /&gt;
 * master&lt;br /&gt;
&lt;br /&gt;
== List your local non committed changes ==&lt;br /&gt;
 $ git status | less&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Now you can start to work on your tree. As soon as you feel you&#039;ve reached a step in developement you can commit &#039;&#039;&#039;locally&#039;&#039;&#039; your work by&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
or&lt;br /&gt;
 $ git commit &amp;lt;specific files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== List your commits ==&lt;br /&gt;
 $ git log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keeping your local working branch in sync ==&lt;br /&gt;
 $ git fetch origin&lt;br /&gt;
 $ git rebase origin&lt;br /&gt;
voilà! Your commit will be re-applied on top of the origin (the svn trunk).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Submitting patches to the vlc-devel ==&lt;br /&gt;
If you have been developing on vlc locally and (still) don&#039;t have write access, you can submit all your commit in one shot using:&lt;br /&gt;
 $ git format-patch -o out origin&lt;br /&gt;
which will produce the patches for each local commit in the directory &amp;quot;out&amp;quot;.&lt;br /&gt;
You can also use the [http://www.kernel.org/pub/software/scm/git/docs/git-imap-send.html git-imap-send] command:&lt;br /&gt;
 $ git format-patch --stdout --attach -n origin | git-imap-send&lt;br /&gt;
which will directly produces the emails and store them in a imap mail box, provided that you have properly set up [http://www.kernel.org/pub/software/scm/git/docs/git-imap-send.html git-imap-send].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced usage =&lt;br /&gt;
== Creating a secondary local branch ==&lt;br /&gt;
If you want to work on a specific project that could require a branch of the trunk, create a local branch of the current branch by doing:&lt;br /&gt;
 $ git branch mywork&lt;br /&gt;
and to actually use it do:&lt;br /&gt;
 $ git checkout mywork&lt;br /&gt;
Which could be summarized by:&lt;br /&gt;
 $ git checkout -b mywork&lt;br /&gt;
&lt;br /&gt;
Then do some commit on it... And you can go back to your original master branch by doing:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
== Fetching a remote branch ==&lt;br /&gt;
If the remote branch is named avacore_branch&lt;br /&gt;
 $ git checkout origin/avacore_branch&lt;br /&gt;
To stay up-to-date a simple&lt;br /&gt;
 $ git fetch&lt;br /&gt;
Should be enough.&lt;br /&gt;
&lt;br /&gt;
== Revert your non-committed local changes ==&lt;br /&gt;
 $ git checkout -f&lt;br /&gt;
&lt;br /&gt;
==Undo commit ==&lt;br /&gt;
This will undo the last commit&lt;br /&gt;
 $ git reset HEAD^&lt;br /&gt;
which is the same as&lt;br /&gt;
 $ git reset master^&lt;br /&gt;
(if you are checked-out copy of your tree is master)&lt;br /&gt;
And also the same as&lt;br /&gt;
 $ git reset a44a594 # note that there is no need to use the full sha id&lt;br /&gt;
if you have:&lt;br /&gt;
 $ git log&lt;br /&gt;
 commit ff7004b70fd239e4120deb160e2991bd5237b8df&lt;br /&gt;
 Author: fkuehne &amp;lt;fkuehne&amp;gt;&lt;br /&gt;
 Date:   Thu Apr 12 18:44:47 2007 +0000&lt;br /&gt;
     * added sanity flags for future darwin releases and potentionally fixed OSX &lt;br /&gt;
 commit a44a594898f981a145cfcace5f16f8973f9eb46f&lt;br /&gt;
 Author: jb &amp;lt;jb&amp;gt;&lt;br /&gt;
 Date:   Thu Apr 12 16:24:49 2007 +0000&lt;br /&gt;
     Qt4 - MouseWheel support - patch by Sergey Volk.&lt;br /&gt;
&lt;br /&gt;
== Diff-ing ==&lt;br /&gt;
* You can diff between two branches using&lt;br /&gt;
 $ git diff branch1 branch2&lt;br /&gt;
* You can diff between the previous 10th commit and current using&lt;br /&gt;
 $ git diff HEAD~10 HEAD&lt;br /&gt;
* You can diff between the previous 10th commit and current of the branch &amp;quot;mywork&amp;quot; using&lt;br /&gt;
 $ git diff mywork~10 mywork&lt;br /&gt;
* Imagine that git log is like&lt;br /&gt;
 $ git log&lt;br /&gt;
 commit e0394f269305edd09843257e7c1d1a66aaf48ab3&lt;br /&gt;
 Author: jb &amp;lt;jb&amp;gt;&lt;br /&gt;
 Date:   Fri Apr 13 07:14:48 2007 +0000&lt;br /&gt;
    qt4 - Mousewheel (2)&lt;br /&gt;
 commit e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
 [..]&lt;br /&gt;
 commit ff7004b70fd239e4120deb160e2991bd5237b8df&lt;br /&gt;
 [..]&lt;br /&gt;
 commit a44a594898f981a145cfcace5f16f8973f9eb46f&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 690df705c963cf6bf6f5746d54bc97a85ff91919&lt;br /&gt;
 [..]&lt;br /&gt;
 commit 679f8b1c3e0baa469efa970588b95a625c595d64&lt;br /&gt;
 [..]&lt;br /&gt;
&lt;br /&gt;
 $ git diff a44a594898f981a145cfcace5f16f8973f9eb46f~2 e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
Will be equivalent to:&lt;br /&gt;
 $ git diff ff7004b70fd239e4120deb160e2991bd5237b8df e80b339081aa6755f67c9bd8e2aacf93a9a79d95&lt;br /&gt;
And to:&lt;br /&gt;
 $ git diff HEAD~4 HEAD^&lt;br /&gt;
&lt;br /&gt;
* Remember that to produce a patch you should rather use git-format-patch than git-diff most of the time.&lt;br /&gt;
&lt;br /&gt;
== Tracking regression ==&lt;br /&gt;
git has a great tool called [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect] to help you to track a faulty commit. Imagine you are tracking a bug that is known to appear after 0.8.6 (assuming 0.8.6 is tagged):&lt;br /&gt;
 $ git bisect start&lt;br /&gt;
 $ git bisect bad # tell git current version has the bug you are tracking&lt;br /&gt;
 $ git bisect good 0.8.6 # tell git 0.8.6 didn&#039;t has the bug&lt;br /&gt;
And then git will checkout a certain revision, and ask you to test it. And you simply say whether this version has the bug.&lt;br /&gt;
If it has the bug:&lt;br /&gt;
 $ git bisect bad&lt;br /&gt;
if the bug is not present:&lt;br /&gt;
 $ git bisect good&lt;br /&gt;
And so on by bisection... At the end git will indicate the faulty commit. Most of the time this tool is really efficient to track regression.&lt;br /&gt;
&lt;br /&gt;
If you can provide a script that test the presence of the bug &lt;br /&gt;
 $ git bisect run &amp;lt;script_name&amp;gt;&lt;br /&gt;
will be able to track down the regression by itself. See [http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html git-bisect Documentation].&lt;br /&gt;
&lt;br /&gt;
= Using Git (and git-svn) to commit on VideoLAN svn trunk =&lt;br /&gt;
== Initial checkout ==&lt;br /&gt;
First get the official VLC svn trunk within git&lt;br /&gt;
 $ git-svn init svn://your_committer_login@svn.videolan.org/vlc&lt;br /&gt;
If you want the full history skip this step:&lt;br /&gt;
 $ git-svn fetch -r19800&lt;br /&gt;
Now get the get the rest&lt;br /&gt;
 $ git-svn fetch&lt;br /&gt;
Compress the tree:&lt;br /&gt;
 $ git repack -d&lt;br /&gt;
&lt;br /&gt;
== Keeping in sync ==&lt;br /&gt;
 $ git-svn fetch&lt;br /&gt;
 $ git rebase&lt;br /&gt;
&lt;br /&gt;
== Commit to VLC svn through git-svn ==&lt;br /&gt;
Once you&#039;ve locally committed your changes you should be able to commit them to the remote svn branch by doing:&lt;br /&gt;
 $ git-svn dcommit&lt;br /&gt;
&lt;br /&gt;
Note that with git-svn, you&#039;ll lost some of the git advantages, and it will probably introduce some overhead in some cases.&lt;br /&gt;
&lt;br /&gt;
= Using Git to publish your work (for SoC student?) =&lt;br /&gt;
First get the official VLC &#039;&#039;&#039;Soc&#039;&#039;&#039; trunk&lt;br /&gt;
 $ git clone git://git.videolan.org/vlc-soc.git&lt;br /&gt;
 $ cd vlc-soc&lt;br /&gt;
Ask for write access to a branch (called your_name_branch). Now we will make git know that you want to publish on this branch&lt;br /&gt;
 $ git config remote.my_soc_public_branch.url ssh://your_name@altair.videolan.org/home/videolan/gitroot/vlc-soc.git&lt;br /&gt;
Now tell git that you want to automatically push the local master branch to the public your_name_branch:&lt;br /&gt;
 $ git config remote.my_soc_public_branch.push +master:your_name_branch # the &amp;quot;+&amp;quot; will tell git to force update ignoring conflicts&lt;br /&gt;
&lt;br /&gt;
Do some work and commit it to your master branch.&lt;br /&gt;
 $ git commit -a&lt;br /&gt;
You can also sync with the trunk (origin) as needed&lt;br /&gt;
 $ git fetch origin&lt;br /&gt;
 $ git rebase origin&lt;br /&gt;
And don&#039;t forget to publish your changes:&lt;br /&gt;
 $ git push my_soc_public_branch&lt;br /&gt;
Now you should be able to see your latest changes in your branch via [http://git.videolan.org/cgi-bin/gitweb.cgi gitweb].&lt;br /&gt;
&lt;br /&gt;
= Documentation about git =&lt;br /&gt;
* [http://git.or.cz/ Official Git Website]&lt;br /&gt;
* [http://www.kernel.org/pub/software/scm/git/docs/tutorial.html Git Tutorial]&lt;br /&gt;
* [http://git.or.cz/course/svn.html Switching from SVN to git using cogito]&lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=User:Sam_Hocevar&amp;diff=1701</id>
		<title>User:Sam Hocevar</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=User:Sam_Hocevar&amp;diff=1701"/>
		<updated>2005-06-23T20:40:39Z</updated>

		<summary type="html">&lt;p&gt;Sam Hocevar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi! I am a [[VLC]] developer, currently not very active.&lt;/div&gt;</summary>
		<author><name>Sam Hocevar</name></author>
	</entry>
</feed>