<?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=Trax</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=Trax"/>
	<link rel="alternate" type="text/html" href="https://wiki.videolan.org/Special:Contributions/Trax/"/>
	<updated>2026-11-04T14:50:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11744</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11744"/>
		<updated>2008-05-31T20:32:59Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Fetching a remote branch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually the cause of the Cygwin issue: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11659</id>
		<title>Win32CompileCygwinNew</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11659"/>
		<updated>2008-05-25T11:24:16Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a new version of the Win32CompileCygwin written by [[User:J-b|Jean-Baptiste Kempf]]&lt;br /&gt;
&#039;&#039;&#039;This version ONLY works for 0.9.x.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This is a guide for Windows users with a step-by-step instruction to download, install, configure and build your VLC.&lt;br /&gt;
&lt;br /&gt;
This guide uses [http://www.cygwin.com &#039;&#039;&#039;Cygwin&#039;&#039;&#039;] a Linux-like environment for Windows used for compilation of the VLC source code.&lt;br /&gt;
&lt;br /&gt;
Start off by creating a VLC and a download folder on your hard drive where you can put all the installation files:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\&lt;br /&gt;
 C:\VLC\Downloads&lt;br /&gt;
&lt;br /&gt;
For further reference, the assumption is made that the local user will be &#039;Administrator&#039;.&lt;br /&gt;
&lt;br /&gt;
=Cygwin=&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://www.cygwin.com/cygwin/setup.exe Cygwin setup] and save it in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
More info about Cygwin can be found at http://www.cygwin.com or http://sourceware.org/cygwin&lt;br /&gt;
&lt;br /&gt;
==Selecting Cygwin packages to install==&lt;br /&gt;
&lt;br /&gt;
Run the setup program with the following options:&lt;br /&gt;
&lt;br /&gt;
Installation type : Install from Internet (default)&lt;br /&gt;
&lt;br /&gt;
Root directory : C:\cygwin (default)&lt;br /&gt;
&lt;br /&gt;
Local Package directory : C:\VLC\Downloads\cygwin (your download location)&lt;br /&gt;
&lt;br /&gt;
Internet Connection : Direct Connection (preferred, if it fails try another)&lt;br /&gt;
&lt;br /&gt;
Download Site : Choose a download site closest to you (FTP preferred)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the &amp;quot;Select Packages&amp;quot; section of the installation process you can select packages by clicking the button with the rotating 2 arrows. (This is under the &amp;quot;New&amp;quot; section). It shows &amp;quot;Skip&amp;quot; next to the button if the package isn&#039;t selected yet.&lt;br /&gt;
&lt;br /&gt;
Clicking the button a few times will rotate through the possible package versions including &amp;quot;Skip&amp;quot; (meaning do not install or remove if installed) and &amp;quot;Keep&amp;quot; (meaning keep using the current installed version). If a package was already installed it will also show the &amp;quot;Current&amp;quot; version just to the left of it.&lt;br /&gt;
&lt;br /&gt;
Select the following packages (some others will automatically be selected as well):&lt;br /&gt;
&lt;br /&gt;
 Archive&lt;br /&gt;
   unzip&lt;br /&gt;
   zip&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   autoconf&lt;br /&gt;
   automake&lt;br /&gt;
   binutils&lt;br /&gt;
   cvs&lt;br /&gt;
   expat&lt;br /&gt;
   gcc&lt;br /&gt;
   gcc-core&lt;br /&gt;
   gcc-g++&lt;br /&gt;
   gcc-mingw&lt;br /&gt;
   gcc-mingw-core&lt;br /&gt;
   gcc-mingw-g++&lt;br /&gt;
   gdb&lt;br /&gt;
   gettext&lt;br /&gt;
   gettext-devel&lt;br /&gt;
   git&lt;br /&gt;
   libtool&lt;br /&gt;
   make&lt;br /&gt;
   mingw-runtime&lt;br /&gt;
   nasm&lt;br /&gt;
   patchutils&lt;br /&gt;
   pkg-config&lt;br /&gt;
   subversion&lt;br /&gt;
 &lt;br /&gt;
 Editor&lt;br /&gt;
   vim&lt;br /&gt;
&lt;br /&gt;
 Libs&lt;br /&gt;
   libgcrypt&lt;br /&gt;
&lt;br /&gt;
 Web&lt;br /&gt;
   curl (optional: for building extras/contrib)&lt;br /&gt;
   wget (optional: for building extras/contrib)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cygwin environment==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin from the icon on your desktop (With Windows Vista run it with admin rights, so right click and select &amp;quot;Run as administrator&amp;quot;). If it runs for the first time it will automatically create a home\&amp;quot;username&amp;quot; folder in the Cygwin environment; user being the currently logged on Windows user. Assuming this is the &#039;Administrator&#039; user it will create the following folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: On your desktop, you can rightclick the Cygwin icon and (in the Options field of the Cygwin Properties) set the Command history Buffer size to as large as possible: 999. This setting will make it possible to scroll back further in the Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
=VLC source code=&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
The very latest VLC source code can be obtained through a tool called Git. The Cygwin package we&#039;re about to install comes with an internal git component.&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.videolan.org/vlc.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually the cause of the Cygwin issue: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
25 may 2008 error is now&lt;br /&gt;
&lt;br /&gt;
 fatal: pack has bad object at offset 83704978: inflate returned -3&lt;br /&gt;
 fatal: index-pack failed&lt;br /&gt;
 fetch-pack from &#039;git://git.videolan.org/vlc.git&#039; failed.&lt;br /&gt;
&lt;br /&gt;
== Snapshots ==&lt;br /&gt;
&lt;br /&gt;
You can do the same by using the snapshots in the nightly builds site.&lt;br /&gt;
&lt;br /&gt;
=Bootstrap=&lt;br /&gt;
&lt;br /&gt;
Open the configure.ac file, and modify the requirement for gettext 0.17 to 0.15 (so replace line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.17)&#039;&#039;&#039; with line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.15)&#039;&#039;&#039;), and then run bootstrap.&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
= External libraries to the source code=&lt;br /&gt;
&lt;br /&gt;
VLC depends on other libraries (code) to provide some features like AC3 audio or MPEG-4 video encoding/decoding etc.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs you will have to install and compile some or all of these external libraries. &lt;br /&gt;
&lt;br /&gt;
== Get the Win32 &amp;quot;contrib&amp;quot; package ==&lt;br /&gt;
&lt;br /&gt;
A package with most of these libraries already compiled so it&#039;s actually really easy to compile a full-featured version of vlc can be found here:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
Download the latest version of a &amp;quot;contrib&amp;quot; package for win32:&lt;br /&gt;
&lt;br /&gt;
 contrib-20060730-win32-bin-gcc-3.4.5-only.tar.bz2 (example)&lt;br /&gt;
&lt;br /&gt;
Those days, you should use&lt;br /&gt;
 http://people.videolan.org/~jb/Contribs/contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to check the INSTALL.Win32 file in the VLC source directory for the appropriate contrib download file.&lt;br /&gt;
&lt;br /&gt;
Save it into your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
==Installing the Win32 &amp;quot;contrib&amp;quot; package in Cygwin==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/Downloads&lt;br /&gt;
 tar xf contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2 -C /&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the &amp;quot;contrib&amp;quot; file and DON&#039;T FORGET THE / (slash)&lt;br /&gt;
at the end.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into usr/win32 folder within your Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to DELETE your old version instead of extracting a new version on top of it.&lt;br /&gt;
&lt;br /&gt;
==Keeping the Win32 &amp;quot;contrib&amp;quot; package up-to-date==&lt;br /&gt;
&lt;br /&gt;
For maintenance purposes periodically check:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure=&lt;br /&gt;
&lt;br /&gt;
In order to make our lives just a bit easier the following section describes what commandline options should be used for compiling and those commands will then be put into a &amp;quot;script&amp;quot; that can be executed (rather than having to copy and paste all the time).&lt;br /&gt;
&lt;br /&gt;
==Configure script for compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
  PATH=/usr/win32/bin:$PATH \&lt;br /&gt;
  PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig \&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I/usr/win32/include -I/usr/win32/include/ebml&amp;quot; \&lt;br /&gt;
  LDFLAGS=-L/usr/win32/lib \&lt;br /&gt;
  CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
      --host=i686-pc-mingw32 \&lt;br /&gt;
      --disable-gtk \&lt;br /&gt;
      --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \&lt;br /&gt;
      --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora \&lt;br /&gt;
      --with-wx-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-freetype-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-fribidi-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-live555 --with-live555-tree=/usr/win32/live.com \&lt;br /&gt;
      --enable-caca --with-caca-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-xml2-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-dvdnav-config-path=/usr/win32/bin \&lt;br /&gt;
      --disable-cddax --disable-vcdx --enable-goom \&lt;br /&gt;
      --enable-twolame --enable-dvdread \&lt;br /&gt;
      --enable-debug  --enable-dca \&lt;br /&gt;
      --disable-mkv --disable-taglib&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options are added for debug purposes and makes the final package a bit larger but the advantage is it&#039;s easier to debug in case of crash reports:&lt;br /&gt;
&lt;br /&gt;
 --disable-optimizations&lt;br /&gt;
 --enable-debug&lt;br /&gt;
&lt;br /&gt;
If you want to report a crash bug to the VLC team, it is necessary that you provide a stack backtrace. Unfortunately, Windows automatic crash reporter cannot generate such a backtrace as debug symbols used by GCC compiler aren&#039;t understood by Windows, therefore we suggest that you install Dr. MinGW (http://jrfonseca.dyndns.org/projects/gnu-win32/software/drmingw/) which will extend Windows Just-In-Time Debugger and provide the necessary debug information.&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options is needed for Qt4 support:&lt;br /&gt;
&lt;br /&gt;
 --enable-qt4&lt;br /&gt;
&lt;br /&gt;
As of version 0.9.0 VLC will include the Qt interface. More information can be found about QT here: http://www.trolltech.com&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Win32 contrib package&amp;quot; at present includes the linux and Windows equivalents of uic, moc and roc executables which are required for building this interface.&lt;br /&gt;
&lt;br /&gt;
The linuxs executables have to be &#039;&#039;&#039;deleted&#039;&#039;&#039; from the contrib folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\bin\moc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\rcc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\uic (example)&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
 &lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
After your configure-vlc.sh is completed, copy it to your vlc directory and run it:&lt;br /&gt;
&lt;br /&gt;
 ./configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
If it complains about permissions, use chmod and try again:&lt;br /&gt;
&lt;br /&gt;
 chmod 777 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE. (If you plan to use JVLC) To make vlc-control.dll accessible by Java on &#039;&#039;Windows&#039;&#039; cofigure-vlc.sh should be modified to include &amp;quot;-Wl,--add-stdcal-alias&amp;quot;. Example:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; CXX=&amp;quot;g++ -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; \&lt;br /&gt;
 ./configure \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POSIX emulation layer===&lt;br /&gt;
&lt;br /&gt;
VLC can be built with or without the so called POSIX emulation layer. Without is the default and is usually better (and with hasn&#039;t been tested for quite some time). If you do want to use the emulation layer, then just leave out the line with the following options:&lt;br /&gt;
&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Compiling source code=&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start Cygwin again...&lt;br /&gt;
&lt;br /&gt;
==Compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
&lt;br /&gt;
Build it! (remember to run configure-vlc.sh before first build)&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Cross your fingers and wait... because it might take few hours before compilation is done&lt;br /&gt;
&lt;br /&gt;
==Creating self contained packages==&lt;br /&gt;
&lt;br /&gt;
Once the compilation is done, you can either run VLC directly from the source tree or you can build self-contained VLC packages with the following &amp;quot;make&amp;quot; commands:&lt;br /&gt;
&lt;br /&gt;
 make package-win32-base&lt;br /&gt;
&lt;br /&gt;
(This will create a subdirectory named vlc-x.x.x with all the binaries &amp;quot;stripped&amp;quot; without any debugging symbols).&lt;br /&gt;
&lt;br /&gt;
 make package-win32-zip&lt;br /&gt;
&lt;br /&gt;
(Same as above but will package the directory in a zip file).&lt;br /&gt;
&lt;br /&gt;
 make package-win32&lt;br /&gt;
&lt;br /&gt;
(Same as above but will also create an auto-installer package. You will need to have NSIS installed in its default location for this to work).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Advanced usage=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating Cygwin package versions==&lt;br /&gt;
&lt;br /&gt;
If you need to update or install additional packages you can just run the Cygwin setup.exe from your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\cygwin\setup.exe          (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GDB (Gnu Debugger)==&lt;br /&gt;
&lt;br /&gt;
This section requires that you installed the gdb (Gnu Debugger) in Cygwin.&lt;br /&gt;
&lt;br /&gt;
This is a typical example of creating a crashlog:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
 gdb --args vlc.exe --fast-mutex --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
NOTE: vlc-0.9.0 uses libtool for building sources, if you want to debug from the source tree, you should type the following command instead:&lt;br /&gt;
&lt;br /&gt;
 libtool --mode=execute gdb --args vlc --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
In the debugger mode run the program and make sure you reset the preferences!&lt;br /&gt;
&lt;br /&gt;
 (gdb) run &lt;br /&gt;
&lt;br /&gt;
NOTE: the (gdb) is just a prompt which means you are in the debugger mode, please note that &#039;&#039;--fast-mutex&#039;&#039; option is no longer supported in vlc-0.9.0&lt;br /&gt;
&lt;br /&gt;
It will now take a lot longer than usual for VLC to start :)&lt;br /&gt;
&lt;br /&gt;
Now operate VLC as you would normally do. As soon as a crash issue occurs&lt;br /&gt;
you&#039;ll notice a line like this:&lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29)&lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 459             i = i_bottom + ( i_top - i_bottom ) / 2;&lt;br /&gt;
&lt;br /&gt;
Now you can do a &amp;quot;backtrace&amp;quot; by using the bt command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
&lt;br /&gt;
And output similar to this will be created:&lt;br /&gt;
&lt;br /&gt;
 #0  0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29) &lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 #1  0x0b26bbf7 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29fef8}) at playlist.cpp:695&lt;br /&gt;
 #2  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29e8b0}) at playlist.cpp:689&lt;br /&gt;
 #3  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29a818}) at playlist.cpp:689&lt;br /&gt;
 #4  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x299718}) at playlist.cpp:689&lt;br /&gt;
 #5  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0xffff0000}) at playlist.cpp:689&lt;br /&gt;
 #6  0x0b26bf49 in wxvlc::Playlist::AppendItem (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:564&lt;br /&gt;
 #7  0x0b2757fc in wxvlc::Playlist::OnPlaylistEvent (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:1438&lt;br /&gt;
 #8  0x0b3771b8 in wxEvtHandler::ProcessEventIfMatches ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #9  0x0b376a1c in wxEventHashTable::HandleEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #10 0x0b37730d in wxEvtHandler::ProcessEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #11 0x0b37711b in wxEvtHandler::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 #12 0x0b376017 in wxAppConsole::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #13 0x0b3ec75a in wxIdleWakeUpModule::MsgHookProc ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/bmpbuttn.h:81&lt;br /&gt;
 #14 0x773aca2d in USER32!GetScrollRange ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/user32.dll&lt;br /&gt;
 #15 0x00000000 in ?? () from&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To backtrace all the running threads use:&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all bt&lt;br /&gt;
&lt;br /&gt;
These are the log outputs that are more usefull to developers than just mentioning &amp;quot;it crashes&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
NOTE: In GDB mode there are sometimes situations where GDB initially &amp;quot;crashes&amp;quot; on certain network activity (opening network shares, network traffic) which in normal operation does not occur. Just select c for continue until &amp;quot;normal&amp;quot; operation continues.&lt;br /&gt;
&lt;br /&gt;
== Common errors ==&lt;br /&gt;
===vlc.exe: Permission denied===&lt;br /&gt;
&lt;br /&gt;
A make finished successfully and produced vlc.exe, but running the executable returns the following:&lt;br /&gt;
&lt;br /&gt;
 bash: ./vlc.exe: Permission denied&lt;br /&gt;
&lt;br /&gt;
The permissions on both vlc.exe &amp;amp; vlc.exe.manifest must be set to executable. &lt;br /&gt;
&lt;br /&gt;
FIX: Type the following:&lt;br /&gt;
 &lt;br /&gt;
 chmod 755 vlc.exe vlc.exe.manifest&lt;br /&gt;
&lt;br /&gt;
===error: parse error before &#039;(&#039; token===&lt;br /&gt;
&lt;br /&gt;
A make (compile) of FFmpeg results in the following error:&lt;br /&gt;
&lt;br /&gt;
 /usr/include/sys/unistd.h:203: error: parse error before &#039;(&#039; token&lt;br /&gt;
 make[1]: *** [ffm.o] Error 1&lt;br /&gt;
&lt;br /&gt;
It&#039;s very likely you are usix the POSIX emulater which you shouldn&#039;t...&lt;br /&gt;
&lt;br /&gt;
FIX: compile with the option &lt;br /&gt;
&lt;br /&gt;
 -mno-cygwin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token==&lt;br /&gt;
&lt;br /&gt;
 In file included from /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32&lt;br /&gt;
 api/windows.h:52,&lt;br /&gt;
                  from ../../../include/vlc_common.h:459,&lt;br /&gt;
                  from ../../../include/vlc/vlc.h:153,&lt;br /&gt;
                  from dshow.cpp:31:&lt;br /&gt;
 /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32api/wingdi.h:3:1: warn&lt;br /&gt;
 ing: this is the location of the previous definition&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:14: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:5552: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:45,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/strmif.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dsound.h:13,&lt;br /&gt;
                  from /usr/win32/include/amaudio.h:18,&lt;br /&gt;
                  from /usr/win32/include/dshow.h:47,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:22: warning: ignoring #pragma warning&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:1813: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:48,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/control.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 dshow.cpp: In function `int CommonOpen(vlc_object_t*, access_sys_t*, vlc_bool_t)&lt;br /&gt;
 &#039;:&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;=&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:485: error: expected `;&#039; before &amp;quot;IAMCrossbar&amp;quot;&lt;br /&gt;
 dshow.cpp:491: error: `pXbar&#039; undeclared (first use this function)&lt;br /&gt;
 dshow.cpp:491: error: (Each undeclared identifier is reported only once for each&lt;br /&gt;
 function it appears in.)&lt;br /&gt;
 make[6]: *** [libdshow_plugin_a-dshow.o] Error 1&lt;br /&gt;
 make[6]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[5]: *** [all-modules] Error 1&lt;br /&gt;
 make[5]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[4]: *** [all-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/home/Administrator/vlc-trunk/modules/access&#039;&lt;br /&gt;
 make[3]: *** [all] Error 2&lt;br /&gt;
&lt;br /&gt;
Basically in case of conflict svn adds &amp;quot;&amp;lt;&amp;lt;&amp;lt; mine&amp;quot; and &amp;quot;=======&amp;quot; and &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; r1242&amp;quot; which makes gcc complain.&lt;br /&gt;
&lt;br /&gt;
FIX: revert the offending file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objective C source seen but `OBJC&#039; is undefined==&lt;br /&gt;
&lt;br /&gt;
The configure process stops halfway.&lt;br /&gt;
&lt;br /&gt;
 + aclocal-1.9 -I m4&lt;br /&gt;
 + autoconf&lt;br /&gt;
 + autoheader&lt;br /&gt;
 + automake-1.9 --add-missing --copy -Wall&lt;br /&gt;
 configure.ac: installing `autotools/install-sh&#039;&lt;br /&gt;
 configure.ac: installing `autotools/missing&#039;&lt;br /&gt;
 activex/Makefile.am:143: shell $(VLC_CONFIG: non-POSIX variable name&lt;br /&gt;
 activex/Makefile.am:143: (probably a GNU make extension)&lt;br /&gt;
 activex/Makefile.am: installing `autotools/compile&#039;&lt;br /&gt;
 activex/Makefile.am: installing `autotools/depcomp&#039;&lt;br /&gt;
 modules/gui/macosx/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 modules/misc/testsuite/Makefile.am: Objective C source seen but `OBJC&#039; is undefi&lt;br /&gt;
 ned&lt;br /&gt;
 src/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 Makefile.am:282: user target `vlc$(EXEEXT)&#039; defined here...&lt;br /&gt;
 /usr/share/automake-1.9/am/program.am: ... overrides Automake target `vlc$(EXEEX&lt;br /&gt;
 T)&#039; defined here&lt;br /&gt;
 Makefile.am:230:   while processing program `vlc&#039;&lt;br /&gt;
 make: *** No targets specified and no makefile found.  Stop.&lt;br /&gt;
 &lt;br /&gt;
This problem is related to a warning earlier on and only occured in a few revisions where a built-in workaround wasn&#039;t working properly:&lt;br /&gt;
&lt;br /&gt;
 + echo &#039;Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&#039;&lt;br /&gt;
 Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&lt;br /&gt;
&lt;br /&gt;
FIX: update autoconf to 2.60 or newer. If Cygwin doesn&#039;t provide this version yet then build it yourself from extras/contrib.&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/extras/contrib&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
 make .autoconf&lt;br /&gt;
&lt;br /&gt;
There should now be compiled autoconf version (probably 2.60 or newer) in extras/contrib that the bootstrap process will use.&lt;br /&gt;
&lt;br /&gt;
Now start the whole &amp;quot;Compile VLC&amp;quot; process from the start again.&lt;br /&gt;
&lt;br /&gt;
==Error: cannot create temporary file for diversion: Permission denied==&lt;br /&gt;
&lt;br /&gt;
If the above error appears, it might mean you don&#039;t have the TMPDIR defined in cygwin. You will need to define it and have its value point to your temporary directory. You can use &#039;&#039;&#039;export TMPDIR=&amp;quot;/cygdrive/c/temp&amp;quot;&#039;&#039;&#039; or any directory for it (/cygdrive/c/temp is same as C:\temp). If this doesn&#039;t help, make sure you run cygwin with admin rights (With Windows Vista, right click cygwin shortcut and select &amp;quot;Run as administrator&amp;quot;). Avira AntiVir might also cause issues to m4, so disabling it while ./bootstrap might help.&lt;br /&gt;
&lt;br /&gt;
=Version=&lt;br /&gt;
&lt;br /&gt;
20050627 Initial version&lt;br /&gt;
&lt;br /&gt;
20050628 Updated some more exceptions&lt;br /&gt;
&lt;br /&gt;
20050628 Some info added about FFmpeg compiling with AMR&lt;br /&gt;
&lt;br /&gt;
20050629 Finalized FFmpeg compiling&lt;br /&gt;
&lt;br /&gt;
20050630 Cross-compiling&lt;br /&gt;
&lt;br /&gt;
20050724 Some extra compile explanations&lt;br /&gt;
&lt;br /&gt;
20050726 Removed cross-compiling (was for linux -&amp;gt; win32) Patching source code with .diff files&lt;br /&gt;
&lt;br /&gt;
20050823 Added zlib error&lt;br /&gt;
&lt;br /&gt;
20050923 --enable-sdl --with-sdl-config-path=/usr/win32/bin added to configure. Added debug section&lt;br /&gt;
&lt;br /&gt;
20051102 Changed FFmpeg lib names&lt;br /&gt;
&lt;br /&gt;
20051128 Detailed Cygwin upgrade/downgrade for gcc 3.3. Renamed some update scripts. Added FFmpeg CVS update. --disable-gnomevfs added to configure (only used on linux)&lt;br /&gt;
&lt;br /&gt;
20060121 PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig added to configure&lt;br /&gt;
&lt;br /&gt;
20060128 Added curl and libtool to Cygwin for those that want to be able to build extras/contrib themselves&lt;br /&gt;
&lt;br /&gt;
20060217 Added make install-libs install-headers to FFmpeg compile&lt;br /&gt;
&lt;br /&gt;
20060222 Remark about missing &amp;quot;gettext&amp;quot; libs for Cygwin during install&lt;br /&gt;
&lt;br /&gt;
20060225 ./bootstrap: you need libtool&lt;br /&gt;
&lt;br /&gt;
20060618 Updated GCC to 3.4 version and added FFmpeg SVN and DTS support&lt;br /&gt;
&lt;br /&gt;
20060805 Added note about using older binutils and gdb for Cygwin!&lt;br /&gt;
&lt;br /&gt;
20060915 Added note about updating autoconf from extras/contrib for an OBJC problem during configure&lt;br /&gt;
&lt;br /&gt;
20061108 Added note this document is no longer usable since Cygwin has been unusable probably related to some bash/dos2unix change&lt;br /&gt;
&lt;br /&gt;
20070612 Added note about --enable-dca&lt;br /&gt;
&lt;br /&gt;
20080228 New version by [[User:J-b|jb]]&lt;br /&gt;
&lt;br /&gt;
20080307 Added --host=i686-pc-mingw32 option to the configure script&lt;br /&gt;
&lt;br /&gt;
20080311 Simplification&lt;br /&gt;
&lt;br /&gt;
20080323 Added some tips for Vista &lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:Coding]]&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11655</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11655"/>
		<updated>2008-05-24T12:52:48Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually the cause of the Cygwin issue: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11646</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11646"/>
		<updated>2008-05-23T12:39:02Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, it is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11641</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11641"/>
		<updated>2008-05-22T17:32:36Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;It is possible to get &#039;git clone&#039; working again on the affected systems by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11640</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11640"/>
		<updated>2008-05-22T17:30:26Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By removing the Security Update (KB925902) on the affected systems, it is possible to get &#039;git clone&#039; working again but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11639</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11639"/>
		<updated>2008-05-22T17:24:19Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the currently available Cygwin 1.5.25-12 with git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To get &#039;git clone&#039; working properly on the affected systems is by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11638</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11638"/>
		<updated>2008-05-22T17:21:53Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the available Cygwin git package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To get &#039;git clone&#039; working properly on the affected systems is by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11637</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11637"/>
		<updated>2008-05-22T17:16:16Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in the mail archives of the Cygwin project mailing list here &lt;br /&gt;
[http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To get &#039;git clone&#039; working properly on the affected systems is by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11636</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11636"/>
		<updated>2008-05-22T17:13:29Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in several Cygwin mail archives such as [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is actually to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To get &#039;git clone&#039; working properly on the affected systems is by removing the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11635</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11635"/>
		<updated>2008-05-22T17:11:38Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is referred to in several Cygwin mail archives such as [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Git error on Cygwin].&lt;br /&gt;
&lt;br /&gt;
By eliminating the impossible, whatever remained, however improbable, is the following Windows Security Update (April 3, 2007) which is to blame: [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported not to be affected:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;To get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11634</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11634"/>
		<updated>2008-05-22T16:52:28Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; (reproducable every time and at the same percentage) at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified (May 22, 2008) against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11633</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11633"/>
		<updated>2008-05-22T16:50:36Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly (reproducable every time and at the same percentage) with a Cygwin error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This has been verified May 22, 2008 against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1 and is a generic problem which also affects cloning from other git repositories (although x264.git seems unaffected).&lt;br /&gt;
&lt;br /&gt;
The issue is reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)]&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11629</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11629"/>
		<updated>2008-05-22T12:44:44Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&lt;br /&gt;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verified May 22, 2008 against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1.&lt;br /&gt;
&lt;br /&gt;
This is a generic problem which also affects cloning from other git repositories (although x264.git is unaffected). The issue is reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11628</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11628"/>
		<updated>2008-05-22T12:39:11Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verified May 22, 2008 against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1.&lt;br /&gt;
&lt;br /&gt;
This is a generic problem which also affects cloning from other git repositories (although x264.git is unaffected). The issue is reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11627</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11627"/>
		<updated>2008-05-22T12:30:25Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using [http://www.cygwin.com Cygwin] (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
There is a problem on Windows XP (and possibly on other Microsoft Operating Systems) with &#039;git clone&#039; which aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verified May 22, 2008 against the available Cygwin package versions 1.5.5.1-1 and 1.5.4-1.&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other git repositories (although x264.git is unaffected). This issue is reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11626</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11626"/>
		<updated>2008-05-22T12:21:32Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with Security Update &#039;&#039;&#039;KB925902&#039;&#039;&#039; installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (tested with available package versions 1.5.5.1-1 and 1.5.4-1, last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other git repositories. This is also reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems, these are reported to work OK:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11625</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11625"/>
		<updated>2008-05-22T12:20:28Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with KB925902 installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (tested with available package versions 1.5.5.1-1 and 1.5.4-1, last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other git repositories. This is also reported in the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is caused by the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems (last checked on May 22, 2008), these are reported to work fine:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11624</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11624"/>
		<updated>2008-05-22T12:12:32Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin (linux-like build environment):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with KB925902 installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems (last checked on May 22, 2008), these are reported to work fine:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11623</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11623"/>
		<updated>2008-05-22T11:41:59Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with KB925902 installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following systems (last checked on May 22, 2008), these are reported to work fine:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11622</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11622"/>
		<updated>2008-05-22T11:20:20Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applies to:&lt;br /&gt;
&lt;br /&gt;
 Windows XP Service Pack 2 with KB925902 installed&lt;br /&gt;
 Windows XP Service Pack 3&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007): [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
Even though the same Security Update applies to the following Systems (last checked on May 22, 2008), these are reported to work fine:&lt;br /&gt;
&lt;br /&gt;
 Windows Vista Service Pack 1&lt;br /&gt;
 Windows 2003 Server Standard Service Pack 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;A workaround to get &#039;git clone&#039; working properly on the affected systems is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11619</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11619"/>
		<updated>2008-05-22T04:54:40Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and aborts unexpectedly with a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007):&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get &#039;git clone&#039; working properly again is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11618</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11618"/>
		<updated>2008-05-22T04:53:26Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly on other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and will result in a Cygwin error during the &#039;checking out files&#039; at the end of the procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not only affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007):&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get &#039;git clone&#039; working properly again is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11617</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11617"/>
		<updated>2008-05-22T04:43:25Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on May 22, 2008) and will throw an error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not just affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update (April 3, 2007):&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get &#039;git clone&#039; working properly again is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11616</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11616"/>
		<updated>2008-05-22T04:42:04Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly other Microsoft Operating Systems) has a problem with &#039;git clone&#039; (last checked on 22 may 2008) and will throw an error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem does not just affect VLC but also other .git sources. It is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update:&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get &#039;git clone&#039; working properly again is to remove the Security Update (KB925902) but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11614</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11614"/>
		<updated>2008-05-22T04:33:24Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008) and will throw an error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update:&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11612</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11612"/>
		<updated>2008-05-22T04:29:31Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008) and will throw an error during the &#039;checking out files&#039; at the end of the clone procedure:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update:&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons, but then again when security is concerned&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11611</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11611"/>
		<updated>2008-05-22T04:12:03Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.cygwin.com Cygwin] on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008) and will throw an error during the &#039;checking out files&#039; at the end of the proces:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - &#039;&#039;&#039;could not load shell32, Win32 error 487&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The problem is reported on the [http://sourceware.org/ml/cygwin/2007-07/msg00858.html Cygwin mail archive: Git error on Cygwin] and is related to the following Windows Security Update:&lt;br /&gt;
&lt;br /&gt;
[http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx Microsoft Security Bulletin MS07-017 - Vulnerabilities in GDI Could Allow Remote Code Execution (925902)].&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11609</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11609"/>
		<updated>2008-05-22T03:42:12Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Cygwin [http://www.cygwin.com] on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008). An error occurs at the end of the git clone procedure during the &#039;checking out files&#039;:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The &#039;shell32, Win32 error 487&#039; problem using git is reported on the Cygwin mailing here [http://sourceware.org/ml/cygwin/2007-07/msg00858.html].&lt;br /&gt;
&lt;br /&gt;
The problem is actually caused by the following Security Update on Windows XP:&lt;br /&gt;
&lt;br /&gt;
Microsoft Security Bulletin MS07-017 [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx] - Vulnerabilities in GDI Could Allow Remote Code Execution (925902).&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11608</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11608"/>
		<updated>2008-05-22T03:40:44Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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/.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
&#039;&#039;&#039;Note for Windows users using Cygwin as a linux-like build environment:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Cygwin [http://www.cygwin.com] on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008). An error occurs at the end of the git clone procedure during the &#039;checking out files&#039;:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The shell32, Win32 error 487 problem with git is reported on the Cygwin mailing here [http://sourceware.org/ml/cygwin/2007-07/msg00858.html].&lt;br /&gt;
&lt;br /&gt;
The problem is actually caused by the following Security Update on Windows XP:&lt;br /&gt;
&lt;br /&gt;
Microsoft Security Bulletin MS07-017 [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx] - Vulnerabilities in GDI Could Allow Remote Code Execution (925902).&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
== Configure your global git config ==&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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11607</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11607"/>
		<updated>2008-05-22T03:34:52Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Note: Cygwin [http://www.cygwin.com] as a linux-like build environment on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008). An error appears at the &amp;quot;checking out files&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The shell32, Win32 error 487 problem with git is reported on the Cygwin mailing here [http://sourceware.org/ml/cygwin/2007-07/msg00858.html].&lt;br /&gt;
&lt;br /&gt;
The problem is actually caused by the following Security Update on Windows XP: Microsoft Security Bulletin MS07-017 [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx] - Vulnerabilities in GDI Could Allow Remote Code Execution (925902).&lt;br /&gt;
&lt;br /&gt;
A workaround to get git clone working is to uninstall the KB925902 but this is obviously not recommended for security reasons..&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11606</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11606"/>
		<updated>2008-05-22T03:29:44Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Please note that using Cygwin [http://www.cygwin.com] as a linux-like build environment on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008). An error appears at the &amp;quot;checking out files&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The shell32, Win32 error 487 is reported on the Cygwin mailing [http://sourceware.org/ml/cygwin/2007-07/msg00858.html] but no solution is provided yet.&lt;br /&gt;
&lt;br /&gt;
The problem is actually caused by the following Security Update on Windows XP: Microsoft Security Bulletin MS07-017 [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx] - Vulnerabilities in GDI Could Allow Remote Code Execution (925902). A workaround to get tyhings working again is to uninstall the KB925902 but this is obviously not recommended for security reasons..&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11605</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11605"/>
		<updated>2008-05-22T03:27:59Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Please note that using Cygwin [http://www.cygwin.com] as a linux-like build environment on Windows XP (and possibly other Microsoft platforms) has a problem with git clone (last checked on 22 may 2008). An arror appears at the &amp;quot;checking out files&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The shell32, Win32 error 487 is reported on the Cygwin mailing [http://sourceware.org/ml/cygwin/2007-07/msg00858.html] but no solution is provided yet.&lt;br /&gt;
&lt;br /&gt;
The problem is actually caused by the following Security Update on Windows XP: Microsoft Security Bulletin MS07-017 [http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx] - Vulnerabilities in GDI Could Allow Remote Code Execution (925902). A workaround to get tyhings working again is to uninstall the KB925902 but this is obviously not recommended for security reasons..&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11604</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11604"/>
		<updated>2008-05-22T03:14:14Z</updated>

		<summary type="html">&lt;p&gt;Trax: cause of git clone problem on XP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Please note Cygwin on Windows XP (and possibly other Microsoft platforms) has a problem with cloning the VLC source using git (last checked on 22 may 2008). It fails on a shell32 error at the end at checking out files:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
The issue is reported on the Cygwin mailing but no solution is provided yet (see [http://sourceware.org/ml/cygwin/2007-07/msg00858.html])&lt;br /&gt;
&lt;br /&gt;
The problem is caused by the following Update on Windows XP: Microsoft Security Bulletin MS07-017. Vulnerabilities in GDI Could Allow Remote Code Execution (925902). A possible workaround is to uninstall the KB925902 but this is not recommended for security reasons.&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11601</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11601"/>
		<updated>2008-05-21T21:11:32Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Please note that for unknown reasons Cygwin on Windows XP (Vista is reported to work) does not support getting the VLC source using git at this time (12 may 2008). It fails at checking out files:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11511</id>
		<title>Win32CompileCygwinNew</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Win32CompileCygwinNew&amp;diff=11511"/>
		<updated>2008-05-12T09:35:01Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Git */ Cygwin problem git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a new version of the Win32CompileCygwin written by [[User:J-b|Jean-Baptiste Kempf]]&lt;br /&gt;
&#039;&#039;&#039;This version ONLY works for 0.9.x.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This is a guide for Windows users with a step-by-step instruction to download, install, configure and build your VLC.&lt;br /&gt;
&lt;br /&gt;
This guide uses [http://www.cygwin.com &#039;&#039;&#039;Cygwin&#039;&#039;&#039;] a Linux-like environment for Windows used for compilation of the VLC source code.&lt;br /&gt;
&lt;br /&gt;
Start off by creating a VLC and a download folder on your hard drive where you can put all the installation files:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\&lt;br /&gt;
 C:\VLC\Downloads&lt;br /&gt;
&lt;br /&gt;
For further reference, the assumption is made that the local user will be &#039;Administrator&#039;.&lt;br /&gt;
&lt;br /&gt;
=Cygwin=&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://www.cygwin.com/cygwin/setup.exe Cygwin setup] and save it in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
More info about Cygwin can be found at http://www.cygwin.com or http://sourceware.org/cygwin&lt;br /&gt;
&lt;br /&gt;
==Selecting Cygwin packages to install==&lt;br /&gt;
&lt;br /&gt;
Run the setup program with the following options:&lt;br /&gt;
&lt;br /&gt;
Installation type : Install from Internet (default)&lt;br /&gt;
&lt;br /&gt;
Root directory : C:\cygwin (default)&lt;br /&gt;
&lt;br /&gt;
Local Package directory : C:\VLC\Downloads\cygwin (your download location)&lt;br /&gt;
&lt;br /&gt;
Internet Connection : Direct Connection (preferred, if it fails try another)&lt;br /&gt;
&lt;br /&gt;
Download Site : Choose a download site closest to you (FTP preferred)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the &amp;quot;Select Packages&amp;quot; section of the installation process you can select packages by clicking the button with the rotating 2 arrows. (This is under the &amp;quot;New&amp;quot; section). It shows &amp;quot;Skip&amp;quot; next to the button if the package isn&#039;t selected yet.&lt;br /&gt;
&lt;br /&gt;
Clicking the button a few times will rotate through the possible package versions including &amp;quot;Skip&amp;quot; (meaning do not install or remove if installed) and &amp;quot;Keep&amp;quot; (meaning keep using the current installed version). If a package was already installed it will also show the &amp;quot;Current&amp;quot; version just to the left of it.&lt;br /&gt;
&lt;br /&gt;
Select the following packages (some others will automatically be selected as well):&lt;br /&gt;
&lt;br /&gt;
 Archive&lt;br /&gt;
   unzip&lt;br /&gt;
   zip&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   autoconf&lt;br /&gt;
   automake&lt;br /&gt;
   binutils&lt;br /&gt;
   cvs&lt;br /&gt;
   expat&lt;br /&gt;
   gcc&lt;br /&gt;
   gcc-core&lt;br /&gt;
   gcc-g++&lt;br /&gt;
   gcc-mingw&lt;br /&gt;
   gcc-mingw-core&lt;br /&gt;
   gcc-mingw-g++&lt;br /&gt;
   gdb&lt;br /&gt;
   gettext&lt;br /&gt;
   gettext-devel&lt;br /&gt;
   git&lt;br /&gt;
   libtool&lt;br /&gt;
   make&lt;br /&gt;
   mingw-runtime&lt;br /&gt;
   nasm&lt;br /&gt;
   patchutils&lt;br /&gt;
   pkg-config&lt;br /&gt;
   subversion&lt;br /&gt;
 &lt;br /&gt;
 Editor&lt;br /&gt;
   vim&lt;br /&gt;
&lt;br /&gt;
 Libs&lt;br /&gt;
   libgcrypt&lt;br /&gt;
&lt;br /&gt;
 Web&lt;br /&gt;
   curl (optional: for building extras/contrib)&lt;br /&gt;
   wget (optional: for building extras/contrib)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cygwin environment==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin from the icon on your desktop (With Windows Vista run it with admin rights, so right click and select &amp;quot;Run as administrator&amp;quot;). If it runs for the first time it will automatically create a home\&amp;quot;username&amp;quot; folder in the Cygwin environment; user being the currently logged on Windows user. Assuming this is the &#039;Administrator&#039; user it will create the following folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: On your desktop, you can rightclick the Cygwin icon and (in the Options field of the Cygwin Properties) set the Command history Buffer size to as large as possible: 999. This setting will make it possible to scroll back further in the Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
=VLC source code=&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
The very latest VLC source code can be obtained through a tool called Git. The Cygwin package we&#039;re about to install comes with an internal git component.&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.videolan.org/vlc.git&lt;br /&gt;
&lt;br /&gt;
Please note that for unknown reasons Cygwin does not support getting the VLC source using git at this time (12 may 2008). It fails at checking out files:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
== Snapshots ==&lt;br /&gt;
&lt;br /&gt;
You can do the same by using the snapshots in the nightly builds site.&lt;br /&gt;
&lt;br /&gt;
=Bootstrap=&lt;br /&gt;
&lt;br /&gt;
Open the configure.ac file, and modify the requirement for gettext 0.17 to 0.15 (so replace line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.17)&#039;&#039;&#039; with line &#039;&#039;&#039;AM_GNU_GETTEXT_VERSION(0.15)&#039;&#039;&#039;), and then run bootstrap.&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
= External libraries to the source code=&lt;br /&gt;
&lt;br /&gt;
VLC depends on other libraries (code) to provide some features like AC3 audio or MPEG-4 video encoding/decoding etc.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs you will have to install and compile some or all of these external libraries. &lt;br /&gt;
&lt;br /&gt;
== Get the Win32 &amp;quot;contrib&amp;quot; package ==&lt;br /&gt;
&lt;br /&gt;
A package with most of these libraries already compiled so it&#039;s actually really easy to compile a full-featured version of vlc can be found here:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
Download the latest version of a &amp;quot;contrib&amp;quot; package for win32:&lt;br /&gt;
&lt;br /&gt;
 contrib-20060730-win32-bin-gcc-3.4.5-only.tar.bz2 (example)&lt;br /&gt;
&lt;br /&gt;
Those days, you should use&lt;br /&gt;
 http://people.videolan.org/~jb/Contribs/contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to check the INSTALL.Win32 file in the VLC source directory for the appropriate contrib download file.&lt;br /&gt;
&lt;br /&gt;
Save it into your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\VLC\Downloads\&lt;br /&gt;
&lt;br /&gt;
==Installing the Win32 &amp;quot;contrib&amp;quot; package in Cygwin==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 cd /cygdrive/c/VLC/Downloads&lt;br /&gt;
 tar xf contrib-20080215-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2 -C /&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the &amp;quot;contrib&amp;quot; file and DON&#039;T FORGET THE / (slash)&lt;br /&gt;
at the end.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into usr/win32 folder within your Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to DELETE your old version instead of extracting a new version on top of it.&lt;br /&gt;
&lt;br /&gt;
==Keeping the Win32 &amp;quot;contrib&amp;quot; package up-to-date==&lt;br /&gt;
&lt;br /&gt;
For maintenance purposes periodically check:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure=&lt;br /&gt;
&lt;br /&gt;
In order to make our lives just a bit easier the following section describes what commandline options should be used for compiling and those commands will then be put into a &amp;quot;script&amp;quot; that can be executed (rather than having to copy and paste all the time).&lt;br /&gt;
&lt;br /&gt;
==Configure script for compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
  PATH=/usr/win32/bin:$PATH \&lt;br /&gt;
  PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig \&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I/usr/win32/include -I/usr/win32/include/ebml&amp;quot; \&lt;br /&gt;
  LDFLAGS=-L/usr/win32/lib \&lt;br /&gt;
  CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
      --host=i686-pc-mingw32 \&lt;br /&gt;
      --disable-gtk \&lt;br /&gt;
      --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \&lt;br /&gt;
      --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora \&lt;br /&gt;
      --with-wx-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-freetype-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-fribidi-config-path=/usr/win32/bin \&lt;br /&gt;
      --enable-live555 --with-live555-tree=/usr/win32/live.com \&lt;br /&gt;
      --enable-caca --with-caca-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-xml2-config-path=/usr/win32/bin \&lt;br /&gt;
      --with-dvdnav-config-path=/usr/win32/bin \&lt;br /&gt;
      --disable-cddax --disable-vcdx --enable-goom \&lt;br /&gt;
      --enable-twolame --enable-dvdread \&lt;br /&gt;
      --enable-debug  --enable-dca \&lt;br /&gt;
      --disable-mkv --disable-taglib&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options are added for debug purposes and makes the final package a bit larger but the advantage is it&#039;s easier to debug in case of crash reports:&lt;br /&gt;
&lt;br /&gt;
 --disable-optimizations&lt;br /&gt;
 --enable-debug&lt;br /&gt;
&lt;br /&gt;
If you want to report a crash bug to the VLC team, it is necessary that you provide a stack backtrace. Unfortunately, Windows automatic crash reporter cannot generate such a backtrace as debug symbols used by GCC compiler aren&#039;t understood by Windows, therefore we suggest that you install Dr. MinGW (http://jrfonseca.dyndns.org/projects/gnu-win32/software/drmingw/) which will extend Windows Just-In-Time Debugger and provide the necessary debug information.&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options is needed for Qt4 support:&lt;br /&gt;
&lt;br /&gt;
 --enable-qt4&lt;br /&gt;
&lt;br /&gt;
As of version 0.9.0 VLC will include the Qt interface. More information can be found about QT here: http://www.trolltech.com&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Win32 contrib package&amp;quot; at present includes the linux and Windows equivalents of uic, moc and roc executables which are required for building this interface.&lt;br /&gt;
&lt;br /&gt;
The linuxs executables have to be &#039;&#039;&#039;deleted&#039;&#039;&#039; from the contrib folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\bin\moc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\rcc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\uic (example)&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
 &lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
After your configure-vlc.sh is completed, copy it to your vlc directory and run it:&lt;br /&gt;
&lt;br /&gt;
 ./configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
If it complains about permissions, use chmod and try again:&lt;br /&gt;
&lt;br /&gt;
 chmod 777 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE. (If you plan to use JVLC) To make vlc-control.dll accessible by Java on &#039;&#039;Windows&#039;&#039; cofigure-vlc.sh should be modified to include &amp;quot;-Wl,--add-stdcal-alias&amp;quot;. Example:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; CXX=&amp;quot;g++ -mno-cygwin -Wl,--add-stdcall-alias&amp;quot; \&lt;br /&gt;
 ./configure \&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POSIX emulation layer===&lt;br /&gt;
&lt;br /&gt;
VLC can be built with or without the so called POSIX emulation layer. Without is the default and is usually better (and with hasn&#039;t been tested for quite some time). If you do want to use the emulation layer, then just leave out the line with the following options:&lt;br /&gt;
&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Compiling source code=&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start Cygwin again...&lt;br /&gt;
&lt;br /&gt;
==Compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc&lt;br /&gt;
&lt;br /&gt;
Build it! (remember to run configure-vlc.sh before first build)&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Cross your fingers and wait... because it might take few hours before compilation is done&lt;br /&gt;
&lt;br /&gt;
==Creating self contained packages==&lt;br /&gt;
&lt;br /&gt;
Once the compilation is done, you can either run VLC directly from the source tree or you can build self-contained VLC packages with the following &amp;quot;make&amp;quot; commands:&lt;br /&gt;
&lt;br /&gt;
 make package-win32-base&lt;br /&gt;
&lt;br /&gt;
(This will create a subdirectory named vlc-x.x.x with all the binaries &amp;quot;stripped&amp;quot; without any debugging symbols).&lt;br /&gt;
&lt;br /&gt;
 make package-win32-zip&lt;br /&gt;
&lt;br /&gt;
(Same as above but will package the directory in a zip file).&lt;br /&gt;
&lt;br /&gt;
 make package-win32&lt;br /&gt;
&lt;br /&gt;
(Same as above but will also create an auto-installer package. You will need to have NSIS installed in its default location for this to work).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Advanced usage=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating Cygwin package versions==&lt;br /&gt;
&lt;br /&gt;
If you need to update or install additional packages you can just run the Cygwin setup.exe from your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\cygwin\setup.exe          (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GDB (Gnu Debugger)==&lt;br /&gt;
&lt;br /&gt;
This section requires that you installed the gdb (Gnu Debugger) in Cygwin.&lt;br /&gt;
&lt;br /&gt;
This is a typical example of creating a crashlog:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
 gdb --args vlc.exe --fast-mutex --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
NOTE: vlc-0.9.0 uses libtool for building sources, if you want to debug from the source tree, you should type the following command instead:&lt;br /&gt;
&lt;br /&gt;
 libtool --mode=execute gdb --args vlc --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
In the debugger mode run the program and make sure you reset the preferences!&lt;br /&gt;
&lt;br /&gt;
 (gdb) run &lt;br /&gt;
&lt;br /&gt;
NOTE: the (gdb) is just a prompt which means you are in the debugger mode, please note that &#039;&#039;--fast-mutex&#039;&#039; option is no longer supported in vlc-0.9.0&lt;br /&gt;
&lt;br /&gt;
It will now take a lot longer than usual for VLC to start :)&lt;br /&gt;
&lt;br /&gt;
Now operate VLC as you would normally do. As soon as a crash issue occurs&lt;br /&gt;
you&#039;ll notice a line like this:&lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29)&lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 459             i = i_bottom + ( i_top - i_bottom ) / 2;&lt;br /&gt;
&lt;br /&gt;
Now you can do a &amp;quot;backtrace&amp;quot; by using the bt command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
&lt;br /&gt;
And output similar to this will be created:&lt;br /&gt;
&lt;br /&gt;
 #0  0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29) &lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 #1  0x0b26bbf7 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29fef8}) at playlist.cpp:695&lt;br /&gt;
 #2  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29e8b0}) at playlist.cpp:689&lt;br /&gt;
 #3  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29a818}) at playlist.cpp:689&lt;br /&gt;
 #4  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x299718}) at playlist.cpp:689&lt;br /&gt;
 #5  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0xffff0000}) at playlist.cpp:689&lt;br /&gt;
 #6  0x0b26bf49 in wxvlc::Playlist::AppendItem (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:564&lt;br /&gt;
 #7  0x0b2757fc in wxvlc::Playlist::OnPlaylistEvent (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:1438&lt;br /&gt;
 #8  0x0b3771b8 in wxEvtHandler::ProcessEventIfMatches ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #9  0x0b376a1c in wxEventHashTable::HandleEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #10 0x0b37730d in wxEvtHandler::ProcessEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #11 0x0b37711b in wxEvtHandler::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 #12 0x0b376017 in wxAppConsole::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #13 0x0b3ec75a in wxIdleWakeUpModule::MsgHookProc ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/bmpbuttn.h:81&lt;br /&gt;
 #14 0x773aca2d in USER32!GetScrollRange ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/user32.dll&lt;br /&gt;
 #15 0x00000000 in ?? () from&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To backtrace all the running threads use:&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all bt&lt;br /&gt;
&lt;br /&gt;
These are the log outputs that are more usefull to developers than just mentioning &amp;quot;it crashes&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
NOTE: In GDB mode there are sometimes situations where GDB initially &amp;quot;crashes&amp;quot; on certain network activity (opening network shares, network traffic) which in normal operation does not occur. Just select c for continue until &amp;quot;normal&amp;quot; operation continues.&lt;br /&gt;
&lt;br /&gt;
== Common errors ==&lt;br /&gt;
===vlc.exe: Permission denied===&lt;br /&gt;
&lt;br /&gt;
A make finished successfully and produced vlc.exe, but running the executable returns the following:&lt;br /&gt;
&lt;br /&gt;
 bash: ./vlc.exe: Permission denied&lt;br /&gt;
&lt;br /&gt;
The permissions on both vlc.exe &amp;amp; vlc.exe.manifest must be set to executable. &lt;br /&gt;
&lt;br /&gt;
FIX: Type the following:&lt;br /&gt;
 &lt;br /&gt;
 chmod 755 vlc.exe vlc.exe.manifest&lt;br /&gt;
&lt;br /&gt;
===error: parse error before &#039;(&#039; token===&lt;br /&gt;
&lt;br /&gt;
A make (compile) of FFmpeg results in the following error:&lt;br /&gt;
&lt;br /&gt;
 /usr/include/sys/unistd.h:203: error: parse error before &#039;(&#039; token&lt;br /&gt;
 make[1]: *** [ffm.o] Error 1&lt;br /&gt;
&lt;br /&gt;
It&#039;s very likely you are usix the POSIX emulater which you shouldn&#039;t...&lt;br /&gt;
&lt;br /&gt;
FIX: compile with the option &lt;br /&gt;
&lt;br /&gt;
 -mno-cygwin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token==&lt;br /&gt;
&lt;br /&gt;
 In file included from /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32&lt;br /&gt;
 api/windows.h:52,&lt;br /&gt;
                  from ../../../include/vlc_common.h:459,&lt;br /&gt;
                  from ../../../include/vlc/vlc.h:153,&lt;br /&gt;
                  from dshow.cpp:31:&lt;br /&gt;
 /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32api/wingdi.h:3:1: warn&lt;br /&gt;
 ing: this is the location of the previous definition&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:14: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:5552: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:45,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/strmif.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dsound.h:13,&lt;br /&gt;
                  from /usr/win32/include/amaudio.h:18,&lt;br /&gt;
                  from /usr/win32/include/dshow.h:47,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:22: warning: ignoring #pragma warning&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:1813: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:48,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/control.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 dshow.cpp: In function `int CommonOpen(vlc_object_t*, access_sys_t*, vlc_bool_t)&lt;br /&gt;
 &#039;:&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;=&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:485: error: expected `;&#039; before &amp;quot;IAMCrossbar&amp;quot;&lt;br /&gt;
 dshow.cpp:491: error: `pXbar&#039; undeclared (first use this function)&lt;br /&gt;
 dshow.cpp:491: error: (Each undeclared identifier is reported only once for each&lt;br /&gt;
 function it appears in.)&lt;br /&gt;
 make[6]: *** [libdshow_plugin_a-dshow.o] Error 1&lt;br /&gt;
 make[6]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[5]: *** [all-modules] Error 1&lt;br /&gt;
 make[5]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[4]: *** [all-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/home/Administrator/vlc-trunk/modules/access&#039;&lt;br /&gt;
 make[3]: *** [all] Error 2&lt;br /&gt;
&lt;br /&gt;
Basically in case of conflict svn adds &amp;quot;&amp;lt;&amp;lt;&amp;lt; mine&amp;quot; and &amp;quot;=======&amp;quot; and &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; r1242&amp;quot; which makes gcc complain.&lt;br /&gt;
&lt;br /&gt;
FIX: revert the offending file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objective C source seen but `OBJC&#039; is undefined==&lt;br /&gt;
&lt;br /&gt;
The configure process stops halfway.&lt;br /&gt;
&lt;br /&gt;
 + aclocal-1.9 -I m4&lt;br /&gt;
 + autoconf&lt;br /&gt;
 + autoheader&lt;br /&gt;
 + automake-1.9 --add-missing --copy -Wall&lt;br /&gt;
 configure.ac: installing `autotools/install-sh&#039;&lt;br /&gt;
 configure.ac: installing `autotools/missing&#039;&lt;br /&gt;
 activex/Makefile.am:143: shell $(VLC_CONFIG: non-POSIX variable name&lt;br /&gt;
 activex/Makefile.am:143: (probably a GNU make extension)&lt;br /&gt;
 activex/Makefile.am: installing `autotools/compile&#039;&lt;br /&gt;
 activex/Makefile.am: installing `autotools/depcomp&#039;&lt;br /&gt;
 modules/gui/macosx/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 modules/misc/testsuite/Makefile.am: Objective C source seen but `OBJC&#039; is undefi&lt;br /&gt;
 ned&lt;br /&gt;
 src/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 Makefile.am:282: user target `vlc$(EXEEXT)&#039; defined here...&lt;br /&gt;
 /usr/share/automake-1.9/am/program.am: ... overrides Automake target `vlc$(EXEEX&lt;br /&gt;
 T)&#039; defined here&lt;br /&gt;
 Makefile.am:230:   while processing program `vlc&#039;&lt;br /&gt;
 make: *** No targets specified and no makefile found.  Stop.&lt;br /&gt;
 &lt;br /&gt;
This problem is related to a warning earlier on and only occured in a few revisions where a built-in workaround wasn&#039;t working properly:&lt;br /&gt;
&lt;br /&gt;
 + echo &#039;Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&#039;&lt;br /&gt;
 Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&lt;br /&gt;
&lt;br /&gt;
FIX: update autoconf to 2.60 or newer. If Cygwin doesn&#039;t provide this version yet then build it yourself from extras/contrib.&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/extras/contrib&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
 make .autoconf&lt;br /&gt;
&lt;br /&gt;
There should now be compiled autoconf version (probably 2.60 or newer) in extras/contrib that the bootstrap process will use.&lt;br /&gt;
&lt;br /&gt;
Now start the whole &amp;quot;Compile VLC&amp;quot; process from the start again.&lt;br /&gt;
&lt;br /&gt;
==Error: cannot create temporary file for diversion: Permission denied==&lt;br /&gt;
&lt;br /&gt;
If the above error appears, it might mean you don&#039;t have the TMPDIR defined in cygwin. You will need to define it and have its value point to your temporary directory. You can use &#039;&#039;&#039;export TMPDIR=&amp;quot;/cygdrive/c/temp&amp;quot;&#039;&#039;&#039; or any directory for it (/cygdrive/c/temp is same as C:\temp). If this doesn&#039;t help, make sure you run cygwin with admin rights (With Windows Vista, right click cygwin shortcut and select &amp;quot;Run as administrator&amp;quot;). Avira AntiVir might also cause issues to m4, so disabling it while ./bootstrap might help.&lt;br /&gt;
&lt;br /&gt;
=Version=&lt;br /&gt;
&lt;br /&gt;
20050627 Initial version&lt;br /&gt;
&lt;br /&gt;
20050628 Updated some more exceptions&lt;br /&gt;
&lt;br /&gt;
20050628 Some info added about FFmpeg compiling with AMR&lt;br /&gt;
&lt;br /&gt;
20050629 Finalized FFmpeg compiling&lt;br /&gt;
&lt;br /&gt;
20050630 Cross-compiling&lt;br /&gt;
&lt;br /&gt;
20050724 Some extra compile explanations&lt;br /&gt;
&lt;br /&gt;
20050726 Removed cross-compiling (was for linux -&amp;gt; win32) Patching source code with .diff files&lt;br /&gt;
&lt;br /&gt;
20050823 Added zlib error&lt;br /&gt;
&lt;br /&gt;
20050923 --enable-sdl --with-sdl-config-path=/usr/win32/bin added to configure. Added debug section&lt;br /&gt;
&lt;br /&gt;
20051102 Changed FFmpeg lib names&lt;br /&gt;
&lt;br /&gt;
20051128 Detailed Cygwin upgrade/downgrade for gcc 3.3. Renamed some update scripts. Added FFmpeg CVS update. --disable-gnomevfs added to configure (only used on linux)&lt;br /&gt;
&lt;br /&gt;
20060121 PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig added to configure&lt;br /&gt;
&lt;br /&gt;
20060128 Added curl and libtool to Cygwin for those that want to be able to build extras/contrib themselves&lt;br /&gt;
&lt;br /&gt;
20060217 Added make install-libs install-headers to FFmpeg compile&lt;br /&gt;
&lt;br /&gt;
20060222 Remark about missing &amp;quot;gettext&amp;quot; libs for Cygwin during install&lt;br /&gt;
&lt;br /&gt;
20060225 ./bootstrap: you need libtool&lt;br /&gt;
&lt;br /&gt;
20060618 Updated GCC to 3.4 version and added FFmpeg SVN and DTS support&lt;br /&gt;
&lt;br /&gt;
20060805 Added note about using older binutils and gdb for Cygwin!&lt;br /&gt;
&lt;br /&gt;
20060915 Added note about updating autoconf from extras/contrib for an OBJC problem during configure&lt;br /&gt;
&lt;br /&gt;
20061108 Added note this document is no longer usable since Cygwin has been unusable probably related to some bash/dos2unix change&lt;br /&gt;
&lt;br /&gt;
20070612 Added note about --enable-dca&lt;br /&gt;
&lt;br /&gt;
20080228 New version by [[User:J-b|jb]]&lt;br /&gt;
&lt;br /&gt;
20080307 Added --host=i686-pc-mingw32 option to the configure script&lt;br /&gt;
&lt;br /&gt;
20080311 Simplification&lt;br /&gt;
&lt;br /&gt;
20080323 Added some tips for Vista &lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:Coding]]&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Git&amp;diff=11510</id>
		<title>Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Git&amp;diff=11510"/>
		<updated>2008-05-12T09:30:11Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* Getting VLC source code via Git */ Cygwin problem git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&lt;br /&gt;
Please note that for unknown reasons Cygwin does not support getting the VLC source using git at this time (12 may 2008). It fails at checking out files:&lt;br /&gt;
&lt;br /&gt;
 $ 2 [main] git 4012 D:\cygwin\bin\git.exe:&lt;br /&gt;
   *** fatal error - could not load shell32, Win32 error 487&lt;br /&gt;
&lt;br /&gt;
You can also clone using http with out 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;
=== 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 too complain (like in svn) use:&lt;br /&gt;
 $ git config --global alias.up &#039;!sh -c &amp;quot;git stash &amp;amp;&amp;amp; git pull --rebase &amp;amp;&amp;amp; git stash apply&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 ther same things you are working on, want to refresh yourself (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&#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;
&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 ==&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 commit 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;
which will produce the patches for each local commit in the directory &amp;quot;patches&amp;quot; and send them.&lt;br /&gt;
--no-chain-reply-to make sure it doesn&#039;t reply 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 :&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;
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 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;
&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;
== 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;
= 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>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Win32CompileCygwinOld&amp;diff=11455</id>
		<title>Win32CompileCygwinOld</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Win32CompileCygwinOld&amp;diff=11455"/>
		<updated>2008-04-29T22:28:36Z</updated>

		<summary type="html">&lt;p&gt;Trax: updated cygwin package versions and note about old mingw-runtime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cygwin environment for Windows from http://developers.videolan.org/vlc/cygwin-compile.txt&lt;br /&gt;
&lt;br /&gt;
Originally based on &amp;quot;Win32 Cygwin Environment&amp;quot; Rev. B (20041003) by Mark Moriarty and &amp;quot;Win32 Compile HOWTO&amp;quot; (20050513) by Gildas Bazin and Olivier Teulière.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
This is a guide for Windows users with a step-by-step instruction to download, install and configure the following components on your system:&lt;br /&gt;
&lt;br /&gt;
* [http://www.cygwin.com &#039;&#039;&#039;Cygwin&#039;&#039;&#039;]:  Linux-like environment for Windows used for compilation of the VLC source code&lt;br /&gt;
&lt;br /&gt;
* [http://download.videolan.org/pub/videolan/testing/win32/ &#039;&#039;&#039;Win32 contrib package&#039;&#039;&#039;]:  Precompiled library package (with DTS support).&lt;br /&gt;
&lt;br /&gt;
Optionally updated libraries:&lt;br /&gt;
&lt;br /&gt;
* [http://ffmpeg.mplayerhq.hu &#039;&#039;&#039;FFmpeg&#039;&#039;&#039;] (with AMR support).&lt;br /&gt;
&lt;br /&gt;
* [http://developers.videolan.org/x264.html &#039;&#039;&#039;x264&#039;&#039;&#039;] used for encoding H.264/AVC video.&lt;br /&gt;
&lt;br /&gt;
* [http://www.live555.com &#039;&#039;&#039;live555&#039;&#039;&#039;] (formerly known as live.com) for RTP/RTCP/RTSP/SIP multimedia streaming.&lt;br /&gt;
&lt;br /&gt;
The best approach to start getting comfortable with building VLC from source is to use the precompiled library package and not yet the optionally updated ones.&lt;br /&gt;
&lt;br /&gt;
Start off by creating a download folder on your hard drive where you can put all the installation files:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads (example)&lt;br /&gt;
&lt;br /&gt;
For further reference, the assumption is made that the local user will be &#039;Administrator&#039;.&lt;br /&gt;
&lt;br /&gt;
=Cygwin=&lt;br /&gt;
&lt;br /&gt;
More info about Cygwin can be found at http://www.cygwin.com or http://sourceware.org/cygwin&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://www.cygwin.com/cygwin/setup.exe Cygwin setup] (it&#039;s at the install or update now icon on the site) and save it in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\cygwin (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Selecting Cygwin packages to install==&lt;br /&gt;
&lt;br /&gt;
Run the setup program with the following options:&lt;br /&gt;
&lt;br /&gt;
Installation type : Install from Internet (default)&lt;br /&gt;
&lt;br /&gt;
Root directory : C:\cygwin (default)&lt;br /&gt;
&lt;br /&gt;
Local Package directory : C:\Downloads\cygwin (your download location)&lt;br /&gt;
&lt;br /&gt;
Internet Connection : Direct Connection (preferred, if it fails try another)&lt;br /&gt;
&lt;br /&gt;
Download Site : Choose a download site closest to you (FTP preferred)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the &amp;quot;Select Packages&amp;quot; section of the installation process you can select packages by clicking the button with the rotating 2 arrows. (This is under the &amp;quot;New&amp;quot; section). It shows &amp;quot;Skip&amp;quot; next to the button if the package isn&#039;t selected yet.&lt;br /&gt;
&lt;br /&gt;
Clicking the button a few times will rotate through the possible package versions including &amp;quot;Skip&amp;quot; (meaning do not install or remove if installed) and &amp;quot;Keep&amp;quot; (meaning keep using the current installed version). If a package was already installed it will also show the &amp;quot;Current&amp;quot; version just to the left of it.&lt;br /&gt;
&lt;br /&gt;
Select the following packages (some others will automatically be selected as well):&lt;br /&gt;
&lt;br /&gt;
 Archive&lt;br /&gt;
   5.52-2       unzip (recommended: goes hand in hand with zip utility)&lt;br /&gt;
   2.23-2       zip (required: to make self contained zip packages)&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   2.1          automake (at least 1.5 is required)&lt;br /&gt;
   20060817-1   binutils (autoselected)&lt;br /&gt;
   1.11.22-1    cvs (required for autopoint)&lt;br /&gt;
   3.4.4-3      gcc-core (autoselected)&lt;br /&gt;
   3.4.4-3      gcc-g++&lt;br /&gt;
   20040810-1   gcc-mingw&lt;br /&gt;
   20050522-1   gcc-mingw-core (autoselected)&lt;br /&gt;
   20050522-1   gcc-mingw-g++ (autoselected)&lt;br /&gt;
   6.8-2        gdb (optional: for debugging purposes)&lt;br /&gt;
   0.15-1       gettext (autoselected)&lt;br /&gt;
   0.15-1       gettext-devel&lt;br /&gt;
   1.5.5.1-1    git&lt;br /&gt;
   1.5.27a-1    libtool&lt;br /&gt;
   3.81-2       make&lt;br /&gt;
   &#039;&#039;&#039;3.13-1       mingw-runtime&#039;&#039;&#039; (autoselected)&lt;br /&gt;
   2.02-1    nasm (optional: for compiling x264 encoder)	&lt;br /&gt;
   0.2.31-1     patchutils (optional: for patching source files with .diff files)&lt;br /&gt;
   0.23a-1       pkgconfig (recommended: otherwise ./configure will complain about accuracy)&lt;br /&gt;
   1.4.5-2      subversion&lt;br /&gt;
&lt;br /&gt;
 Lib&lt;br /&gt;
   1.4.0-1          libgcrypt&lt;br /&gt;
&lt;br /&gt;
 Web&lt;br /&gt;
   7.16.3-1     curl (optional: for building extras/contrib)&lt;br /&gt;
   1.10.2-2     wget (optional: for building extras/contrib)&lt;br /&gt;
&lt;br /&gt;
The package version numbers happen to be the representation of what was the most current version available at the time this article/section was updated (20080430) &#039;&#039;&#039;with the exception of mingw-runtime which has to be downgraded to 3.13-1 for proper usage&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If you run into problems of missing packages during install (particularly gettext: cyggettextsrc-0-14-1.dll not found) then rerun the setup program and try selecting another Download Site from the mirror list.&lt;br /&gt;
&lt;br /&gt;
NOTE: Whenever new packages are installed or updated through the Cygwin installer, make sure not to update the packages by keeping the old versions (using the &amp;quot;Keep&amp;quot; option).&lt;br /&gt;
&lt;br /&gt;
==Installing older GCC 3.3 version==&lt;br /&gt;
&lt;br /&gt;
The gcc version used for compilation should match the version specified in the &amp;quot;contrib&amp;quot; package, at present gcc-3.4.5-only.&lt;br /&gt;
&lt;br /&gt;
So the preferred version to use is GCC 3.4 but for historical reasons this section descibes what version to use together with an older gcc-3.3.1-only &amp;quot;contrib&amp;quot; package. The 3.3.1 version is not available in Cygwin but 3.3.3-3 (still) is.&lt;br /&gt;
&lt;br /&gt;
The only compatibility issue with using GCC 3.4 and the precompiled 3.3.1 &amp;quot;contrib&amp;quot; package is that it doesn&#039;t support the compiling of the matroska container .mkv so that leaves 2 options; use gcc 3.3.3-3 with a 3.3.1-only &amp;quot;contrib&amp;quot; or gcc 3.4 (or newer) but disable matroska support.&lt;br /&gt;
&lt;br /&gt;
The second option requires you to add the following line to the configure options:&lt;br /&gt;
&lt;br /&gt;
 --disable-mkv&lt;br /&gt;
&lt;br /&gt;
If you use the older gcc-g++ and gcc-core versions you have to change the gcc-mingw-core and gcc-mingw-g++ back to the older versions as well.&lt;br /&gt;
&lt;br /&gt;
Select the following package versions instead:&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   &#039;&#039;&#039;3.3.3-3&#039;&#039;&#039;      gcc-core&lt;br /&gt;
   &#039;&#039;&#039;3.3.3-3&#039;&#039;&#039;      gcc-g++&lt;br /&gt;
   20040810-1   gcc-mingw&lt;br /&gt;
   &#039;&#039;&#039;20040810-1&#039;&#039;&#039;   gcc-mingw-core&lt;br /&gt;
   &#039;&#039;&#039;20040810-1&#039;&#039;&#039;   gcc-mingw-g++&lt;br /&gt;
&lt;br /&gt;
NOTE: The gcc-3.4.5-only &amp;quot;contrib&amp;quot; package should compile just fine with GCC 3.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cygwin environment==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin from the icon on your desktop. If it runs for the first time it will automatically create a home\&amp;quot;username&amp;quot; folder in the Cygwin environment; user being the currently logged on Windows user. Assuming this is the &#039;Administrator&#039; user it will create the following folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: On your desktop, you can rightclick the Cygwin icon and (in the Options field of the Cygwin Properties) set the Command history Buffer size to as large as possible: 999. This setting will make it possible to scroll back further in the Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=VLC source code=&lt;br /&gt;
&lt;br /&gt;
== SVN ==&lt;br /&gt;
The very latest VLC source code can be obtained through a tool called SVN (Subversion). The Cygwin package we&#039;re about to install comes with an internal subversion component. Using this one is the preferred method.&lt;br /&gt;
&lt;br /&gt;
Read the [[SVN]] page.&lt;br /&gt;
&lt;br /&gt;
== GIT ==&lt;br /&gt;
As of March 2008, VLC has switched to a GIT repository.&lt;br /&gt;
If you only need read access, you can continue to use SVN to obtain the latest VLC trunk.&lt;br /&gt;
If you need write (commit) access, you need the Cygwin ssh (Secure Shell), procps, and GIT packages.&lt;br /&gt;
To see if you have them, in a bash shell enter:&lt;br /&gt;
   ssh --help&lt;br /&gt;
   git --help&lt;br /&gt;
   pskill --help&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have them, run Cygwin&#039;s setup.exe, and download/install them.&lt;br /&gt;
For secure shell, generate keys and send the public key (e.g., the file cygwin/home/your_username/.ssh/id_rsa.pub) to the proper vlc admin (check in on IRC for more information).&lt;br /&gt;
Then, update your Cygwin.bat file, so it looks like:&lt;br /&gt;
   @echo off&lt;br /&gt;
   set CYGWIN=binmode&lt;br /&gt;
   C:&lt;br /&gt;
   chdir C:\cygwin\bin&lt;br /&gt;
   c:\cygwin\bin\pkill ssh-agent&lt;br /&gt;
   del c:\cygwin\etc\profile.d\ssh-agent.sh&lt;br /&gt;
   c:\cygwin\bin\ssh-agent &amp;gt; c:\cygwin\etc\profile.d\ssh-agent.sh&lt;br /&gt;
   bash --login -i &lt;br /&gt;
(Change the &amp;quot;C:\&amp;quot; as appropriate)&lt;br /&gt;
&lt;br /&gt;
And update your cygwin\etc\profile file, adding the following at the bottom:&lt;br /&gt;
  ssh-add&lt;br /&gt;
&lt;br /&gt;
The above changes will kill any pre-existing ssh-agent, start a new instance of it, and automatically prompt you for your ssh passphrase when the bash shell opens.&lt;br /&gt;
&lt;br /&gt;
For general VLC git usage, see: http://wiki.videolan.org/Git#Basic_Git_usage&lt;br /&gt;
&lt;br /&gt;
git-gui appears to work well under Cygwin, provides a fairly simple UI.&lt;br /&gt;
&lt;br /&gt;
== Snapshot ==&lt;br /&gt;
Another way of obtaining source code is by downloading a daily code &amp;quot;snapshot&amp;quot; from the following location:&lt;br /&gt;
&lt;br /&gt;
http://nightlies.videolan.org/build/source&lt;br /&gt;
&lt;br /&gt;
Download the latest snapshot:&lt;br /&gt;
&lt;br /&gt;
 vlc-snapshot-20080112.tar.gz (example)&lt;br /&gt;
&lt;br /&gt;
and save it into a subfolder in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\src (example)&lt;br /&gt;
&lt;br /&gt;
Check if the downloaded file has not been renamed by Internet Explorer in your download folder to something with the extension .tar.tar and if so then simple rename the files back to .tar.gz&lt;br /&gt;
&lt;br /&gt;
= External libraries to the source code=&lt;br /&gt;
&lt;br /&gt;
VLC depends on other libraries (code) to provide some features like AC3 audio or MPEG-4 video encoding/decoding etc.&lt;br /&gt;
&lt;br /&gt;
Depending on your needs you will have to install and compile some or all of these external libraries. &lt;br /&gt;
&lt;br /&gt;
== Win32 &amp;quot;contrib&amp;quot; package ==&lt;br /&gt;
&lt;br /&gt;
A package with most of these libraries already compiled so it&#039;s actually really easy to compile a full-featured version of vlc can be found here:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
Download the latest version of a &amp;quot;contrib&amp;quot; package for win32:&lt;br /&gt;
&lt;br /&gt;
 contrib-20060730-win32-bin-gcc-3.4.5-only.tar.bz2 (example)&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good idea to check the INSTALL.Win32 file in the VLC source directory for the appropriate contrib download file.&lt;br /&gt;
&lt;br /&gt;
Save it into a subfolder in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\contrib (example)&lt;br /&gt;
&lt;br /&gt;
Check if the file has not been renamed by Internet Explorer in your download folder to something with the extension .tar.tar and if so then simply rename the file back to .tar.bz2&lt;br /&gt;
&lt;br /&gt;
Also remember the &amp;quot;gcc-3.4.5&amp;quot; part in the &amp;quot;contrib&amp;quot; package filename since it relates to the GCC version that needs to be installed in Cygwin lateron!&lt;br /&gt;
&lt;br /&gt;
== Adding additional or updated libraries to the source (optional) ==&lt;br /&gt;
&lt;br /&gt;
Most of them can be found here (source code):&lt;br /&gt;
&lt;br /&gt;
 http://download.videolan.org/pub/testing/contrib/&lt;br /&gt;
&lt;br /&gt;
It is advised not to recompile those libraries.&lt;br /&gt;
&lt;br /&gt;
Updated libraries for FFmpeg and x264 are available through SVN (which is discussed in a later stage of this guide).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===live555 &amp;quot;snapshot&amp;quot; (optional)===&lt;br /&gt;
&lt;br /&gt;
More info about live555 can be found at:&lt;br /&gt;
&lt;br /&gt;
http://www.live555.com&lt;br /&gt;
&lt;br /&gt;
The project source code is available here:&lt;br /&gt;
&lt;br /&gt;
http://live555.com/liveMedia/public/&lt;br /&gt;
&lt;br /&gt;
Download the latest snapshot:&lt;br /&gt;
&lt;br /&gt;
 live.2007.01.11.tar.gz (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: live555-latest.tar.gz is also the latest version but keeping the date in the filename makes it easier to reference.&lt;br /&gt;
&lt;br /&gt;
and save it into a subfolder in your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\src (example)&lt;br /&gt;
&lt;br /&gt;
Check if the downloaded file has not been renamed by Internet Explorer in your download folder to something with the extension .tar.tar and if so then simple rename the files back to .tar.gz&lt;br /&gt;
&lt;br /&gt;
=Getting the latest sources=&lt;br /&gt;
&lt;br /&gt;
In order to have the latest source code you have to download this using SVN.&lt;br /&gt;
&lt;br /&gt;
Create a new folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\scripts (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SVN update script for VLC==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following line:&lt;br /&gt;
&lt;br /&gt;
 svn checkout svn://svn.videolan.org/vlc/trunk vlc-trunk&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location with the option &amp;quot;All Files&amp;quot; and not &amp;quot;Text Documents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 update-vlc.sh (example)&lt;br /&gt;
&lt;br /&gt;
This command will download a complete svn trunk.&lt;br /&gt;
&lt;br /&gt;
Copy the script file into your Cygwin &amp;quot;home directory&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix update-vlc.sh&lt;br /&gt;
&lt;br /&gt;
This is for converting the &#039;line endings&#039; made by Windows/DOS (in which the text document was created) to UNIX style.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SVN update scripts for additional libraries (optional)==&lt;br /&gt;
&lt;br /&gt;
Updating source code using SVN for additional libraries such as x264 or FFmpeg works the same way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVN update scripts for x264 (optional)===&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following line:&lt;br /&gt;
&lt;br /&gt;
 svn checkout svn://svn.videolan.org/x264/trunk x264-trunk&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 update-x264.sh&lt;br /&gt;
&lt;br /&gt;
Copy the script file into your Cygwin &amp;quot;home directory&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 dos2unix update-x264.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SVN update script for FFmpeg (optional)===&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following line:&lt;br /&gt;
&lt;br /&gt;
 svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg-trunk&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 update-ffmpeg.sh&lt;br /&gt;
&lt;br /&gt;
Copy the script file into your Cygwin &amp;quot;home directory&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix update-ffmpeg.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Checking out&amp;quot; the latest source code from SVN==&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 ./update-vlc.sh&lt;br /&gt;
&lt;br /&gt;
This will download the current &amp;quot;subversion trunk&amp;quot; (latest code) into your home directory into the directory specified in your shell script:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\vlc-trunk (example)&lt;br /&gt;
&lt;br /&gt;
At the end of the command it will show something like &amp;quot;Checked out revision 18561&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The vlc-trunk folder will get over-written/updated the next time you run the command. If you want to save a so called &amp;quot;snapshot&amp;quot; of the existing vlc-trunk, rename or copy the current directory into something desired (like vlc-trunk-20070112).&lt;br /&gt;
&lt;br /&gt;
NOTE: Updating the source code for additional libraries such as x264, FFmpeg etc. is done by running their corresponding update scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Extracting the source from a &amp;quot;snapshot&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
If you are not using SVN to obtain the latest source code but are using a daily &amp;quot;snapshot&amp;quot; then copy that source package from your download/install location to the Cygwin home directory:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 tar xvf vlc-snapshot-20070112.tar.gz (example)&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the source package.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into a subfolder within your Cygwin environment with the naming convention something like:&lt;br /&gt;
&lt;br /&gt;
 vlc-0.9.0-svn (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Installing the Win32 &amp;quot;contrib&amp;quot; package in Cygwin=&lt;br /&gt;
&lt;br /&gt;
First the additional libraries have to be &amp;quot;installed&amp;quot; in Cygwin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Extracting the Win32 &amp;quot;contrib&amp;quot; package==&lt;br /&gt;
&lt;br /&gt;
Copy the &amp;quot;contrib&amp;quot; package from your download/install location to the home directory:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 tar xjvf contrib-20061202-win32-bin-gcc-3.4.5-only.tar.bz2 -C / (example)&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the &amp;quot;contrib&amp;quot; file and DON&#039;T FORGET THE / (slash)&lt;br /&gt;
at the end.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into usr/win32 folder within your Cygwin environment.&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to DELETE your old version instead of extracting a new version on top of it.&lt;br /&gt;
&lt;br /&gt;
==Keeping the Win32 &amp;quot;contrib&amp;quot; package up-to-date==&lt;br /&gt;
&lt;br /&gt;
For maintenance purposes periodically check:&lt;br /&gt;
&lt;br /&gt;
http://download.videolan.org/pub/testing/win32/&lt;br /&gt;
&lt;br /&gt;
to see if a newer &amp;quot;contrib&amp;quot; is available. If that is the case you should DELETE the existing directory structure which is for the precompiled &amp;quot;contrib&amp;quot; package:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32 (example)&lt;br /&gt;
&lt;br /&gt;
Download the newer file and follow the installation instructions the same as before so you will end up with the most up-to-date version.&lt;br /&gt;
&lt;br /&gt;
NOTE: Make sure to DELETE your old version instead of extracting a new version on top of it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure scripts=&lt;br /&gt;
&lt;br /&gt;
In order to make our lives just a bit easier the following section describes what commandline options should be used for compiling and those commands will then be put into a &amp;quot;script&amp;quot; that can be executed (rather than having to copy and paste all the time).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configure script for compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
  CONTRIB_TREE=/usr/win32&lt;br /&gt;
  PATH=${CONTRIB_TREE}/bin:$PATH \&lt;br /&gt;
  ./bootstrap &amp;amp;&amp;amp; \&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I${CONTRIB_TREE}/include -I${CONTRIB_TREE}/include/ebml&amp;quot; \&lt;br /&gt;
  LDFLAGS=-L${CONTRIB_TREE}/lib \&lt;br /&gt;
  PKG_CONFIG_LIBDIR=${CONTRIB_TREE}/lib/pkgconfig \&lt;br /&gt;
  CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot; \&lt;br /&gt;
  ./configure \&lt;br /&gt;
      --host=i686-pc-mingw32 \&lt;br /&gt;
      --enable-sdl --with-sdl-config-path=${CONTRIB_TREE}/bin --disable-gtk \&lt;br /&gt;
      --enable-nls \&lt;br /&gt;
      --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \&lt;br /&gt;
      --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora \&lt;br /&gt;
      --with-wx-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --with-freetype-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --with-fribidi-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --enable-live555 --with-live555-tree=${CONTRIB_TREE}/live.com \&lt;br /&gt;
      --enable-caca --with-caca-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --with-xml2-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --with-dvdnav-config-path=${CONTRIB_TREE}/bin \&lt;br /&gt;
      --disable-cddax --disable-vcdx --enable-goom \&lt;br /&gt;
      --enable-twolame --enable-dvdread \&lt;br /&gt;
      --disable-gnomevfs \&lt;br /&gt;
      --enable-dts \&lt;br /&gt;
      --disable-optimizations \&lt;br /&gt;
      --enable-debug \&lt;br /&gt;
&lt;br /&gt;
NOTE: The following option is added for DTS Coherent Acoustics streams decoding support. The latest &amp;quot;contrib&amp;quot; package should already contain libdca (formerly known as libdts) needed to compile this but at present it&#039;s disabled by default:&lt;br /&gt;
&lt;br /&gt;
 --enable-dts&lt;br /&gt;
&lt;br /&gt;
NOTE: For VLC 0.9.0, replace the previous option by:&lt;br /&gt;
&lt;br /&gt;
 --enable-dca&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options are added for debug purposes and makes the final package a bit larger but the advantage is it&#039;s easier to debug in case of crash reports:&lt;br /&gt;
&lt;br /&gt;
 --disable-optimizations&lt;br /&gt;
 --enable-debug&lt;br /&gt;
&lt;br /&gt;
If you want to report a crash bug to the VLC team, it is necessary that you provide a stack backtrace. Unfortunately, Windows automatic crash reporter cannot generate such a backtrace as debug symbols used by GCC compiler aren&#039;t understood by Windows, therefore we suggest that you install Dr. MinGW (http://jrfonseca.dyndns.org/projects/gnu-win32/software/drmingw/) which will extend Windows Just-In-Time Debugger and provide the necessary debug information.&lt;br /&gt;
&lt;br /&gt;
NOTE: The following options is needed for QT4 support:&lt;br /&gt;
&lt;br /&gt;
 --enable-qt4&lt;br /&gt;
&lt;br /&gt;
As of version 0.9.0 VLC will include the QT interface. More information can be found about QT here: http://www.trolltech.com&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Win32 contrib package&amp;quot; at present only includes the linux equivalents of uic, moc and roc executables which are required for building this interface.&lt;br /&gt;
&lt;br /&gt;
The linues executables have to be &#039;&#039;&#039;deleted&#039;&#039;&#039; from the contrib folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\bin\moc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\rcc (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\uic (example)&lt;br /&gt;
&lt;br /&gt;
The moc, rcc and uic.exe from the [http://www.trolltech.com/developer/downloads/qt/windows Qt/Windows Open Source Edition] (these can be found in the bin folder after installation) have to be placed in the contrib folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\bin\moc.exe (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\rcc.exe (example)&lt;br /&gt;
 C:\cygwin\usr\win32\bin\uic.exe (example)&lt;br /&gt;
 &lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
 &lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POSIX emulation layer===&lt;br /&gt;
&lt;br /&gt;
VLC can be built with or without the so called POSIX emulation layer. Without is the default and is usually better (and with hasn&#039;t been tested for quite some time). If you do want to use the emulation layer, then just leave out the line with the following options:&lt;br /&gt;
&lt;br /&gt;
 CC=&amp;quot;gcc -mno-cygwin&amp;quot; CXX=&amp;quot;g++ -mno-cygwin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===VLC optional settings===&lt;br /&gt;
&lt;br /&gt;
The following option should be used when compiling using the GCC 3.4 version with older &amp;quot;contrib&amp;quot; gcc-3.3.1-only:&lt;br /&gt;
&lt;br /&gt;
 --disable-mkv&lt;br /&gt;
&lt;br /&gt;
==Configure scripts for compiling additional libraries (optional)==&lt;br /&gt;
&lt;br /&gt;
The following section is optional. The &amp;quot;contrib&amp;quot; package contains precompiled libraries but it is possible to update some of those libraries to the most current versions such as x264 and FFmpeg.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FFmpeg with AMR support (optional)===&lt;br /&gt;
&lt;br /&gt;
The AMR (Adaptive Multi Rate) codec is designed to encode and decode speech with acceptable quality for transmission over relatively low bandwidth channels with minimal latency, typically used in mobile networks (3GP) or voice message applications.&lt;br /&gt;
&lt;br /&gt;
The AMR codec is usually referred to as:&lt;br /&gt;
&lt;br /&gt;
 Narrow Band (AMR-NB, fourcc samr) for low quality&lt;br /&gt;
 Wide Band (AMR-WB, fourcc samw) for high quality&lt;br /&gt;
&lt;br /&gt;
The sources for AMR are not compatible with the GPL (General Public License). AMR support is disabled by default.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Getting the AMR reference codecs (optional)====&lt;br /&gt;
&lt;br /&gt;
The AMR reference codecs can be found on the 3GPP site http://www.3gpp.org at the following download location for zipped source code packages:&lt;br /&gt;
&lt;br /&gt;
http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/&lt;br /&gt;
&lt;br /&gt;
Download the following 3 packages to a subfolder in your download/install location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\src (example)&lt;br /&gt;
&lt;br /&gt;
1.  AMR - latest 26073 package:&lt;br /&gt;
&lt;br /&gt;
http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26073-530.zip          (example)&lt;br /&gt;
&lt;br /&gt;
3GPP TS 26.073 V5.3.0 (2004-03) ANSI-C code for the Adaptive Multi Rate (AMR) speech codec (Release 5)&lt;br /&gt;
&lt;br /&gt;
2.  AMR_FLOAT - latest 26104 package:&lt;br /&gt;
&lt;br /&gt;
http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26104-540.zip          (example)&lt;br /&gt;
&lt;br /&gt;
3GPP TS 26.104 V 5.4.0 (2004-03) ANSI-C code for the Floating-point Adaptive Multi Rate (AMR) speech codec (Release 5)&lt;br /&gt;
&lt;br /&gt;
3.  AMRWB_FLOAT - latest 26204 package:&lt;br /&gt;
&lt;br /&gt;
http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26204-520.zip          (example)&lt;br /&gt;
&lt;br /&gt;
3GPP TS 26.204 V5.2.0 (2003-09) ANSI-C code for Floating-point Adaptive Multi Rate Wideband (AMR-WB) speech codec (Release 5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Extracting the AMR reference codecs (optional)====&lt;br /&gt;
&lt;br /&gt;
The following AMR reference packages should now be in your download/install location:&lt;br /&gt;
&lt;br /&gt;
 26073-530.zip (example)&lt;br /&gt;
 26104-540.zip (example)&lt;br /&gt;
 26204-520.zip (example)&lt;br /&gt;
&lt;br /&gt;
Using your favourite unzipper (Windows internal extraction wizard, WinZIP, WinRAR etc.) extract the zip files in the into the current folder (Windows wizard would use &amp;quot;Extract All&amp;quot; and WinZIP or WinRAR would use &amp;quot;Extract to &#039;foldername&#039; which is the same as the .zip package name&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
This will create the following folders:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\src\26073-530         &lt;br /&gt;
 C:\Downloads\VLC\src\26104-540         &lt;br /&gt;
 C:\Downloads\VLC\src\26204-520         &lt;br /&gt;
&lt;br /&gt;
Within those folders another .zip package exists. Again unpack those zip files into the current folder:&lt;br /&gt;
&lt;br /&gt;
 26073-530_ANSI_C_source_code      &lt;br /&gt;
 26104-540_ANSI_C_source_code      &lt;br /&gt;
 26204-520_ANSI-C_source_code      &lt;br /&gt;
&lt;br /&gt;
Now each unpacked source code package has an individual folder named &amp;quot;c-code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Rename the c-code subfolders within each package to amr, amr_float and amrwb_float:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\VLC\src\26073-530\26073-530_ANSI_C_source_code\c-code to amr                  &lt;br /&gt;
 C:\Downloads\VLC\src\26104-540\26104-540_ANSI_C_source_code\c-code to amr_float            &lt;br /&gt;
 C:\Downloads\VLC\src\26204-520\26204-520_ANSI-C_source_code\c-code to amrwb_float          &lt;br /&gt;
&lt;br /&gt;
NOTE: the 530, 540 to 520 order looks a bit confusing but those are actually just version numbers and the folders are shown in the correct alphabetical order.&lt;br /&gt;
&lt;br /&gt;
Copy each of the the following folders (including content, so just select the whole folders itself):&lt;br /&gt;
&lt;br /&gt;
 amr                &lt;br /&gt;
 amr_float         &lt;br /&gt;
 amrwb_float       &lt;br /&gt;
&lt;br /&gt;
to the Cygwin home directory in the libavcodec subfolder of where the FFmpeg package resides:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\ffmpeg-trunk\libavcodec (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FFmpeg configure script with &amp;quot;contrib&amp;quot; package (optional)===&lt;br /&gt;
&lt;br /&gt;
NOTE: This compile script assumes you are also using the same FFmpeg version as is used in the &amp;quot;contrib&amp;quot; package (this is why the cflags and ldflags also point to the win32 folder where the &amp;quot;contrib&amp;quot; package was extracted).&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mingw32 --enable-memalign-hack \&lt;br /&gt;
     --extra-cflags=-I/usr/win32/include \&lt;br /&gt;
     --extra-ldflags=-L/usr/win32/lib \&lt;br /&gt;
     --prefix=/usr/win32 \&lt;br /&gt;
     --cc=&amp;quot;gcc -mno-cygwin&amp;quot; \&lt;br /&gt;
    --enable-faac --enable-mp3lame --enable-pp --enable-gpl --log \&lt;br /&gt;
&lt;br /&gt;
NOTE: For AMR encoding/decoding support also add the following options:&lt;br /&gt;
&lt;br /&gt;
 --enable-amr_nb --enable-amr_wb&lt;br /&gt;
&lt;br /&gt;
NOTE: VLC uses the x264 lib directly and not through ffmpeg so there is no need to add --enable-x264&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-ffmpeg.sh (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator &lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-ffmpeg.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FFmpeg configure script for FFmpeg &amp;quot;stand-alone&amp;quot; (optional)===&lt;br /&gt;
&lt;br /&gt;
This section is only if FFmpeg compiling is required as a stand-alone package and not in combination with the precompiled &amp;quot;contrib&amp;quot; package.&lt;br /&gt;
&lt;br /&gt;
In case of failure to compile VLC with different settings (added/updated libraries to the &amp;quot;contrib&amp;quot;) it is advisable to test if FFmpeg does compile OK just in &amp;quot;stand-alone&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
Create a new text document at the download location with following lines:&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mingw32 --enable-memalign-hack \&lt;br /&gt;
     --cc=&amp;quot;gcc -mno-cygwin&amp;quot; \&lt;br /&gt;
     --enable-pp --enable-gpl --log \&lt;br /&gt;
&lt;br /&gt;
NOTE: When including libraries the following options should be added/changed, pointing to the appropriate folder where does libraries are located (for VLC &amp;quot;contrib&amp;quot; that would be /usr/win32 but in other situations it might be the default /usr/local):&lt;br /&gt;
&lt;br /&gt;
    --extra-cflags=-I/usr/local/include \&lt;br /&gt;
    --extra-ldflags=-L/usr/local/lib \&lt;br /&gt;
    --prefix=/usr/local \&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-ffmpeg-svn.sh (example)&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-ffmpeg-svn.sh&lt;br /&gt;
&lt;br /&gt;
==x264 configure script (optional)==&lt;br /&gt;
&lt;br /&gt;
Create a new text document with the following lines:&lt;br /&gt;
&lt;br /&gt;
 ./configure \&lt;br /&gt;
    --prefix=/usr/win32 \&lt;br /&gt;
&lt;br /&gt;
NOTE: for debugging purposes you can add the following option:&lt;br /&gt;
&lt;br /&gt;
 --enable-debug&lt;br /&gt;
&lt;br /&gt;
Save as filename in your &amp;quot;scripts&amp;quot; folder at your download/install location:&lt;br /&gt;
&lt;br /&gt;
 configure-x264.sh&lt;br /&gt;
&lt;br /&gt;
NOTE: Save using &amp;quot;All files&amp;quot; and not &amp;quot;Text files&amp;quot; otherwise Windows might append the extension .txt.&lt;br /&gt;
&lt;br /&gt;
Copy the file into your home directory:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell: &lt;br /&gt;
&lt;br /&gt;
 dos2unix configure-x264.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Compiling source code=&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to start Cygwin again...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Additional libraries==&lt;br /&gt;
&lt;br /&gt;
If any updated or additional libraries are used they need to be compiled first. Since some of these are used indirectly through FFmpeg, FFmpeg should be compiled last.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Compiling x264 (optional)===&lt;br /&gt;
&lt;br /&gt;
This section is only required for x264 compiling where you want to compile x264 yourself in order to use the latest version.&lt;br /&gt;
&lt;br /&gt;
Change to the appropriate x264 folder&lt;br /&gt;
&lt;br /&gt;
 cd x264-trunk (example)&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If the make proceeded without errors you will have compiled a new library file:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\x264-trunk\libx264.a (example)&lt;br /&gt;
&lt;br /&gt;
Copy this file into the Cygwin usr/win32 folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\lib (example)&lt;br /&gt;
&lt;br /&gt;
Also take the following file .h file:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\x264-trunk\x264.h (example)&lt;br /&gt;
&lt;br /&gt;
Copy this file into the usr/win32/include folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\include (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: This will overwrite the x264.h and libx264.a from the precompiled &amp;quot;contrib&amp;quot; package!&lt;br /&gt;
&lt;br /&gt;
===live555 (optional)===&lt;br /&gt;
&lt;br /&gt;
This section is only required if you want to compile the latest version of live555.&lt;br /&gt;
&lt;br /&gt;
Copy the live555 project package from your download/install location to the home directory:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator&lt;br /&gt;
&lt;br /&gt;
Start Cygwin and enter the following command in your shell:&lt;br /&gt;
&lt;br /&gt;
 tar xvf live.2006.05.17.tar.gz (example)&lt;br /&gt;
&lt;br /&gt;
Replace with your version of the source package.&lt;br /&gt;
&lt;br /&gt;
This will extract the contents of the file into a subfolder within your Cygwin environment with the naming convention something like:&lt;br /&gt;
&lt;br /&gt;
 live (example)&lt;br /&gt;
&lt;br /&gt;
===Compiling FFmpeg (optional)===&lt;br /&gt;
&lt;br /&gt;
This section is only required for FFmpeg compiling.&lt;br /&gt;
&lt;br /&gt;
Change to the appropriate FFmpeg folder&lt;br /&gt;
&lt;br /&gt;
 cd ffmpeg-trunk (example)&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
(This will haved remove everything except code related stuff, VLC uses a &amp;quot;toolbox&amp;quot; script&lt;br /&gt;
which can clean a bit more).&lt;br /&gt;
&lt;br /&gt;
 ../configure-ffmpeg.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Preparations for AMR support (optional)====&lt;br /&gt;
&lt;br /&gt;
If you included the AMR reference codec sources in FFmpeg you should see that AMR-NB and WB &amp;quot;float support&amp;quot; should be working:&lt;br /&gt;
&lt;br /&gt;
 AMR-NB float support yes&lt;br /&gt;
 AMR-NB fixed support no&lt;br /&gt;
 AMR-WB float support yes&lt;br /&gt;
 AMR-WB IF2 support no&lt;br /&gt;
 network support      no&lt;br /&gt;
 License: GPL&lt;br /&gt;
&lt;br /&gt;
 AMR WB FLOAT NOTICE ! Make sure you have downloaded TS26.204&lt;br /&gt;
 V5.1.0 from http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip and extracted the source to libavcodec/amrwb_float&lt;br /&gt;
&lt;br /&gt;
 AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104 REL-5 V5.1.0 from&lt;br /&gt;
 http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip and extracted the source to libavcodec/amr_float&lt;br /&gt;
 If you try this on alpha, you may need to change Word32 to int in amr/typedef.h&lt;br /&gt;
&lt;br /&gt;
NOTE: These warnings/notices can be ignored since we are using more recent versions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Building FFmpeg (optional)====&lt;br /&gt;
&lt;br /&gt;
First clean up any leftovers from a previous compile using the following commands:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
&lt;br /&gt;
(This will haved remove everything except code related stuff, VLC uses a &amp;quot;toolbox&amp;quot; script&lt;br /&gt;
which can clean a bit more).&lt;br /&gt;
&lt;br /&gt;
Now build FFmpeg with the following command:&lt;br /&gt;
&lt;br /&gt;
 make       &lt;br /&gt;
&lt;br /&gt;
If the make proceeded without errors you will have compiled two new &amp;quot;library&amp;quot; files:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\ffmpeg-trunk\libavcodec\libavcodec.a (example)&lt;br /&gt;
 C:\cygwin\home\Administrator\ffmpeg-trunk\libavformat\libavformat.a (example)&lt;br /&gt;
&lt;br /&gt;
To copy the appropriate libs and header files to the (extracted) contrib&lt;br /&gt;
folder use:&lt;br /&gt;
&lt;br /&gt;
 make install-libs install-headers&lt;br /&gt;
&lt;br /&gt;
For historical reasons the &amp;quot;old&amp;quot; method is still described here as well:&lt;br /&gt;
&lt;br /&gt;
Copy the library files (with the .a extension) into the Cygwin usr/win32 folder:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\lib (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: This will overwrite libavcodec.a and libavformat.a from the precompiled&lt;br /&gt;
&amp;quot;contrib&amp;quot; package!&lt;br /&gt;
&lt;br /&gt;
For backup reasons you can first copy or rename the original files in the &amp;quot;contrib&amp;quot; package (so you won&#039;t have to reinstall the complete contrib package but can simply copy these again)&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\usr\win32\lib\libavcodec.a to libavcodec.a.org&lt;br /&gt;
 C:\cygwin\usr\win32\lib\libavformat.a to libavformat.a.org&lt;br /&gt;
&lt;br /&gt;
In older versions of ffmpeg the libraries had other names:&lt;br /&gt;
&lt;br /&gt;
 C:\cygwin\home\Administrator\ffmpeg-20050624\libavcodec\avcodec.lib (example)&lt;br /&gt;
 C:\cygwin\home\Administrator\ffmpeg-20050624\libavformat\avformat.lib (example)&lt;br /&gt;
&lt;br /&gt;
Rename those files (in Windows Explorer):&lt;br /&gt;
&lt;br /&gt;
 avcodec.lib to libavcodec.a&lt;br /&gt;
 avformat.lib to libavformat.a&lt;br /&gt;
&lt;br /&gt;
Then copy those library files into the Cygwin usr/win32 folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Compiling live555 (optional)===&lt;br /&gt;
&lt;br /&gt;
How to configure and build the code on a Linux enviroment is explained on the following live555 page:&lt;br /&gt;
&lt;br /&gt;
http://www.live555.com/liveMedia/#config-unix&lt;br /&gt;
&lt;br /&gt;
Some options need to be changed/added to the config.cygwin file in the live folder so open this file with a text-editor.&lt;br /&gt;
&lt;br /&gt;
Add the -Wno-deprecated option:&lt;br /&gt;
&lt;br /&gt;
 CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 -Wno-deprecated&lt;br /&gt;
&lt;br /&gt;
Save the file under its current name config.cygwin&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd live&lt;br /&gt;
&lt;br /&gt;
The following command is for converting any DOS/Windows &amp;quot;line endings&amp;quot; to UNIX style:&lt;br /&gt;
 &lt;br /&gt;
 dos2unix config.cygwin&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
&lt;br /&gt;
 ./genMakefiles cygwin&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
TODO: Fix live555 compilation. It still fails with the following errors:&lt;br /&gt;
&lt;br /&gt;
 GroupsockHelper.cpp:477: error: aggregate `ip_mreq_source imr&#039; has incomplete type and cannot be defined&lt;br /&gt;
 GroupsockHelper.cpp:482: error: invalid application of `sizeof&#039; to incomplete type `ip_mreq_source&#039;&lt;br /&gt;
 GroupsockHelper.cpp: In function `Boolean socketLeaveGroupSSM(UsageEnvironment&amp;amp;, int,  netAddressBits, netAddressBits)&#039;:&lt;br /&gt;
 GroupsockHelper.cpp:495: error: aggregate `ip_mreq_source imr&#039; has incomplete type and cannot be defined&lt;br /&gt;
 GroupsockHelper.cpp:500: error: invalid application of `sizeof&#039; to incomplete type  `ip_mreq_source&#039;&lt;br /&gt;
 make[1]: *** [GroupsockHelper.o] Error 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compiling VLC==&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
(you can check with the pwd command to see in which folder you are and with just the cd&lt;br /&gt;
command without any additional parameters you can change back to your home directory).&lt;br /&gt;
&lt;br /&gt;
NOTE: The following line is optional, only use that if you have problems compiling.&lt;br /&gt;
&lt;br /&gt;
 ./toolbox --distclean&lt;br /&gt;
&lt;br /&gt;
(This will have removed everything except code related stuff).&lt;br /&gt;
&lt;br /&gt;
 ../configure-vlc.sh&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Cross your fingers...&lt;br /&gt;
&lt;br /&gt;
NOTE: ./ means you run an application/script from the &amp;quot;current folder&amp;quot; (which is vlc-trunk) and ../ points to &amp;quot;one directory up&amp;quot; (which is where configure-vlc.sh is).&lt;br /&gt;
&lt;br /&gt;
==Creating self contained packages==&lt;br /&gt;
&lt;br /&gt;
Once the compilation is done, you can either run VLC directly from the source tree or you can build self-contained VLC packages with the following &amp;quot;make&amp;quot; commands:&lt;br /&gt;
&lt;br /&gt;
 make package-win32-base&lt;br /&gt;
&lt;br /&gt;
(This will create a subdirectory named vlc-x.x.x with all the binaries &amp;quot;stripped&amp;quot; without any debugging symbols).&lt;br /&gt;
&lt;br /&gt;
 make package-win32-zip&lt;br /&gt;
&lt;br /&gt;
(Same as above but will package the directory in a zip file).&lt;br /&gt;
&lt;br /&gt;
 make package-win32&lt;br /&gt;
&lt;br /&gt;
(Same as above but will also create an auto-installer package. You will need to have NSIS installed in its default location for this to work).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Advanced usage=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating Cygwin package versions==&lt;br /&gt;
&lt;br /&gt;
If you need to update or install additional packages you can just run the Cygwin setup.exe from your download location:&lt;br /&gt;
&lt;br /&gt;
 C:\Downloads\cygwin\setup.exe          (example)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using older GCC and MINGW version===&lt;br /&gt;
&lt;br /&gt;
You should be aware that Cygwin automatically selects the latest versions for gcc-g++ and gcc-mingw so if you are using older versions of those (like 3.3.3-3 and the accompanied 20040810-1 packages for mingw) and wish to continue to use them you need to &#039;&#039;&#039;change&#039;&#039;&#039; those versions to &#039;&#039;&#039;Keep&#039;&#039;&#039; for &#039;&#039;&#039;every time you use the update process&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
NOTE: You can click on the &amp;quot;View&amp;quot; button a few times until you see &amp;quot;Partial&amp;quot; next to it. This will give you an overview of some &amp;quot;Current&amp;quot; packages that will be updated to &amp;quot;New&amp;quot; versions.&lt;br /&gt;
&lt;br /&gt;
select the View button until it reaches: Partial&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   3.4.4-3      gcc-core         -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
   3.4.4-3      gcc-g++          -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
   20050522-1   gcc-mingw-core   -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
   20050522-1   gcc-mingw-g++    -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Selecting the 3.4.4-3 version automatically changes the gcc-mingw-core and gcc-mingw-g++ to the 20050522-1 (or newer) versions as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Downgrading Cygwin GCC packages===&lt;br /&gt;
&lt;br /&gt;
If your Cygwin gcc versions are already the latest and you wish to downgrade to gcc 3.3.3-3 then it&#039;s not possible to downgrade the gcc-core/g++ and the mingw packages all at the same time, it has to be done in two steps.&lt;br /&gt;
&lt;br /&gt;
select the View button until it reaches: Up To Date&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   3.4.4-3      gcc-core   -&amp;gt; change version to &#039;&#039;&#039;3.3.3-3&#039;&#039;&#039;&lt;br /&gt;
   3.4.4-3      gcc-g++    -&amp;gt; change version to &#039;&#039;&#039;3.3.3-3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Install, OK.&lt;br /&gt;
&lt;br /&gt;
Restart the Cygwin update process.&lt;br /&gt;
&lt;br /&gt;
Select the View button until it reaches: Partial&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   3.4.4-3      gcc-core   -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
   3.4.4-3      gcc-g++    -&amp;gt; change version to &#039;&#039;&#039;Keep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Select the View button until it reaches: Up To Date&lt;br /&gt;
&lt;br /&gt;
 Devel&lt;br /&gt;
   20050522-1   gcc-mingw-core   -&amp;gt; change version to &#039;&#039;&#039;20040810-1&#039;&#039;&#039; &lt;br /&gt;
   20050522-1   gcc-mingw-g++    -&amp;gt; change version to &#039;&#039;&#039;20040810-1&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Install, OK.&lt;br /&gt;
&lt;br /&gt;
Again, for any new update process remember to change back those versions!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GDB (Gnu Debugger)==&lt;br /&gt;
&lt;br /&gt;
This section requires that you installed the gdb (Gnu Debugger) in Cygwin.&lt;br /&gt;
&lt;br /&gt;
This is a typical example of creating a crashlog:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
 gdb --args vlc.exe --fast-mutex --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
NOTE: vlc-0.9.0 uses libtool for building sources, if you want to debug from the source tree, you should type the following command instead:&lt;br /&gt;
&lt;br /&gt;
 libtool -mode=execute gdb --args vlc --reset-config --reset-plugins-cache&lt;br /&gt;
&lt;br /&gt;
In the debugger mode run the program and make sure you reset the preferences!&lt;br /&gt;
&lt;br /&gt;
 (gdb) run &lt;br /&gt;
&lt;br /&gt;
NOTE: the (gdb) is just a prompt which means you are in the debugger mode, please note that &#039;&#039;--fast-mutex&#039;&#039; option is no longer supported in vlc-0.9.0&lt;br /&gt;
&lt;br /&gt;
It will now take a lot longer than usual for VLC to start :)&lt;br /&gt;
&lt;br /&gt;
Now operate VLC as you would normally do. As soon as a crash issue occurs&lt;br /&gt;
you&#039;ll notice a line like this:&lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29)&lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 459             i = i_bottom + ( i_top - i_bottom ) / 2;&lt;br /&gt;
&lt;br /&gt;
Now you can do a &amp;quot;backtrace&amp;quot; by using the bt command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
&lt;br /&gt;
And output similar to this will be created:&lt;br /&gt;
&lt;br /&gt;
 #0  0x0041394c in playlist_ItemGetById (p_playlist=0x19ec4f8, i_id=29) &lt;br /&gt;
     at src/playlist/item-ext.c:459&lt;br /&gt;
 #1  0x0b26bbf7 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29fef8}) at playlist.cpp:695&lt;br /&gt;
 #2  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29e8b0}) at playlist.cpp:689&lt;br /&gt;
 #3  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x29a818}) at playlist.cpp:689&lt;br /&gt;
 #4  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0x299718}) at playlist.cpp:689&lt;br /&gt;
 #5  0x0b26bc83 in wxvlc::Playlist::CountItems (this=0x1822e288, root=&lt;br /&gt;
       {m_pItem = 0xffff0000}) at playlist.cpp:689&lt;br /&gt;
 #6  0x0b26bf49 in wxvlc::Playlist::AppendItem (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:564&lt;br /&gt;
 #7  0x0b2757fc in wxvlc::Playlist::OnPlaylistEvent (this=0x1822e288,&lt;br /&gt;
     event=@0x1827afd0) at playlist.cpp:1438&lt;br /&gt;
 #8  0x0b3771b8 in wxEvtHandler::ProcessEventIfMatches ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #9  0x0b376a1c in wxEventHashTable::HandleEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #10 0x0b37730d in wxEvtHandler::ProcessEvent ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #11 0x0b37711b in wxEvtHandler::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 #12 0x0b376017 in wxAppConsole::ProcessPendingEvents ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/event.h:2183&lt;br /&gt;
 #13 0x0b3ec75a in wxIdleWakeUpModule::MsgHookProc ()&lt;br /&gt;
     at /usr/win32/include/wx-2.6/wx/bmpbuttn.h:81&lt;br /&gt;
 #14 0x773aca2d in USER32!GetScrollRange ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/user32.dll&lt;br /&gt;
 #15 0x00000000 in ?? () from&lt;br /&gt;
 (gdb)&lt;br /&gt;
&lt;br /&gt;
These are the log outputs that are more usefull to developers than just mentioning &amp;quot;it crashes&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
NOTE: In GDB mode there are sometimes situations where GDB initially &amp;quot;crashes&amp;quot; on certain network activity (opening network shares, network traffic) which in normal operation does not occur. Just select c for continue until &amp;quot;normal&amp;quot; operation continues.&lt;br /&gt;
&lt;br /&gt;
==.diff files==&lt;br /&gt;
&lt;br /&gt;
Frequently patches to source code are presented or discussed in forums or in mailing lists in so called .diff format (these are &amp;quot;differences&amp;quot; to the source code).&lt;br /&gt;
&lt;br /&gt;
You can apply those patches yourself to the source code or create .diff files. This requires the patchutils package in Cygwin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patching source code===&lt;br /&gt;
&lt;br /&gt;
Download a so called .diff file:&lt;br /&gt;
&lt;br /&gt;
 sse2-pixel-routines-v3.diff (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: make sure the file doesn&#039;t get a .txt extension, so Save as type &amp;quot;All Files&amp;quot; instead of &amp;quot;Text Document&amp;quot; (IE has a habit of renaming to .txt. If that happens just simply rename to .diff)&lt;br /&gt;
&lt;br /&gt;
Copy the .diff file into the appropriate source folder&lt;br /&gt;
&lt;br /&gt;
 x264-trunk (example)&lt;br /&gt;
&lt;br /&gt;
Apply the patch as follows&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; sse2-pixel-routines-v3.diff (example)&lt;br /&gt;
&lt;br /&gt;
NOTE: replace sse2-pixel-routines-v3.diff with your &amp;quot;patch&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This will output something like:&lt;br /&gt;
&lt;br /&gt;
 patching file common/i386/pixel.h&lt;br /&gt;
 patching file common/i386/pixel-a.asm&lt;br /&gt;
 patching file common/pixel.c&lt;br /&gt;
&lt;br /&gt;
Your source code is now patched!&lt;br /&gt;
&lt;br /&gt;
NOTE: If you want to revert to the original version you can use the -R option with the patch command or alternatively you can just delete the changed files and just do an SVN update to get the original/latest SVN version back.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating .diff files===&lt;br /&gt;
&lt;br /&gt;
When changing the source code it&#039;s possible to create a &amp;quot;difference&amp;quot; file against the latest source.&lt;br /&gt;
&lt;br /&gt;
In this example the file /modules/codec/x264.c was changed (the part &amp;quot;in kbit/s&amp;quot; was added to a description).&lt;br /&gt;
&lt;br /&gt;
Start your Cygwin shell.&lt;br /&gt;
&lt;br /&gt;
Change to the appropriate folder where a changed file is.&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/modules/codec (example)&lt;br /&gt;
&lt;br /&gt;
Output the svn diff command to a file:&lt;br /&gt;
&lt;br /&gt;
 svn diff -u &amp;gt; x264-patch.diff&lt;br /&gt;
&lt;br /&gt;
The current folder now holds a x264-patch.diff file containing the following:&lt;br /&gt;
&lt;br /&gt;
 Index: x264.c&lt;br /&gt;
 ===================================================================&lt;br /&gt;
 --- x264.c      (revision 15921)&lt;br /&gt;
 +++ x264.c      (working copy)&lt;br /&gt;
 @@ -131,7 +131,7 @@&lt;br /&gt;
  #define RATETOL_LONGTEXT N_( &amp;quot;Allowed variance in average. &amp;quot; \&lt;br /&gt;
      &amp;quot;bitrate (in kbits/s).&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 -#define VBV_MAXRATE_TEXT N_(&amp;quot;Max local bitrate&amp;quot;)&lt;br /&gt;
 +#define VBV_MAXRATE_TEXT N_(&amp;quot;Max local bitrate in kbit/s&amp;quot;)&lt;br /&gt;
  #define VBV_MAXRATE_LONGTEXT N_( &amp;quot;Sets a maximum local bitrate in kbits/s.&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
  #define VBV_BUFSIZE_TEXT N_(&amp;quot;VBV buffer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
NOTE: In Windows you should open this file with something else than notepad (so wordpad or some more advanced editor). This has to do with the end of line markers that are present in the file since it was made in a Linux environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reverting to older SVN source code==&lt;br /&gt;
&lt;br /&gt;
If for some reason you want to revert to (use) an older version (let&#039;s say you are using  revision 15916 of the VLC source code but would like to test with 15915) then use the svn &amp;quot;update&amp;quot; function from within Cygwin but use an older revision number.&lt;br /&gt;
&lt;br /&gt;
Start your Cygwin shell...&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk&lt;br /&gt;
&lt;br /&gt;
 svn up -r 15915&lt;br /&gt;
&lt;br /&gt;
And you&#039;ll see something like this:&lt;br /&gt;
&lt;br /&gt;
 U    src\input\input.c&lt;br /&gt;
 Updated to revision 15915.&lt;br /&gt;
&lt;br /&gt;
The following command will show the version used:&lt;br /&gt;
&lt;br /&gt;
 svn info&lt;br /&gt;
&lt;br /&gt;
=FAQ/Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
This chapter mentions some frequently encountered problems during compile and installation procedures and possible fixes or workarounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Making all in &amp;lt;folder&amp;gt;&amp;quot; takes forever with 0% CPU usage==&lt;br /&gt;
&lt;br /&gt;
Make seems to &amp;quot;stall&amp;quot; at a certain point (no CPU usage) and nothing seems to happen anymore:&lt;br /&gt;
&lt;br /&gt;
 Making all in mpeg&lt;br /&gt;
 make[5]: Entering directory `/home/Administrator/vlc-trunk/modules/mux/mpeg&#039;&lt;br /&gt;
&lt;br /&gt;
NOTE: This problem seems to occur on dual CPU (or HyperThreading enabled)&lt;br /&gt;
systems.&lt;br /&gt;
&lt;br /&gt;
FIX: in the vlc-trunk do a ./toolbox --distclean before doing a ../configure-vlc.sh and try again...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==configure: error: C compiler cannot create executables==&lt;br /&gt;
&lt;br /&gt;
The ../configure-vlc.sh gives the following error:&lt;br /&gt;
&lt;br /&gt;
 checking for gcc... gcc -mno-cygwin&lt;br /&gt;
 checking for C compiler default output file name... configure: error: C compiler&lt;br /&gt;
 cannot create executables&lt;br /&gt;
&lt;br /&gt;
FIX: it&#039;s very likely you are using the gcc 3.3 version but with the wrong mingw packages (the ones that come with 3.4). Reinstall the following gcc-mingw packages but make sure to use the older version!!!&lt;br /&gt;
&lt;br /&gt;
20050522-1      gcc-mingw-core  autoselected -&amp;gt;  change to 20040810-1&lt;br /&gt;
20050522-1      gcc-mingw-g++ 	autoselected -&amp;gt;  change to 20040810-1&lt;br /&gt;
&lt;br /&gt;
You can check what version of gcc you are version in the Cygwin shell by using the following command:&lt;br /&gt;
&lt;br /&gt;
 gcc --version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==collect2: ld returned 1 exit status (libebml)==&lt;br /&gt;
&lt;br /&gt;
A make fails with the following error:&lt;br /&gt;
&lt;br /&gt;
 /usr/win32/lib/libebml.a(EbmlMaster.o):EbmlMaster.cpp:(.text$_ZNSt14__simple_all&lt;br /&gt;
 ocISsSt24__default_alloc_templateILb1ELi0EEE10deallocateEPSsj[std::__simple_allo&lt;br /&gt;
 c&amp;lt;std::basic_string&amp;lt;char, std::char_traits&amp;lt;char&amp;gt;, std::allocator&amp;lt;char&amp;gt; &amp;gt;, std::_&lt;br /&gt;
 _default_alloc_template&amp;lt;true, 0&amp;gt; &amp;gt;::deallocate(std::basic_string&amp;lt;char, std::char&lt;br /&gt;
 _traits&amp;lt;char&amp;gt;, std::allocator&amp;lt;char&amp;gt; &amp;gt;*, unsigned int)]+0x1d): undefined referenc&lt;br /&gt;
 e to `std::__default_alloc_template&amp;lt;true, 0&amp;gt;::deallocate(void*, unsigned int)&#039;&lt;br /&gt;
 /usr/win32/lib/libebml.a(EbmlMaster.o):EbmlMaster.cpp:(.text$_ZNSt14__simple_all&lt;br /&gt;
 ocISsSt24__default_alloc_templateILb1ELi0EEE8allocateEj[std::__simple_alloc&amp;lt;std:&lt;br /&gt;
 :basic_string&amp;lt;char, std::char_traits&amp;lt;char&amp;gt;, std::allocator&amp;lt;char&amp;gt; &amp;gt;, std::__defau&lt;br /&gt;
 lt_alloc_template&amp;lt;true, 0&amp;gt; &amp;gt;::allocate(unsigned int)]+0x1d): undefined reference&lt;br /&gt;
  to `std::__default_alloc_template&amp;lt;true, 0&amp;gt;::allocate(unsigned int)&#039;&lt;br /&gt;
 /usr/win32/lib/libebml.a(EbmlMaster.o):EbmlMaster.cpp:(.text$_ZNSt14__simple_all&lt;br /&gt;
 ocIPN7libebml11EbmlElementESt24__default_alloc_templateILb1ELi0EEE8allocateEj[st&lt;br /&gt;
 d::__simple_alloc&amp;lt;libebml::EbmlElement*, std::__default_alloc_template&amp;lt;true, 0&amp;gt;&lt;br /&gt;
 &amp;gt;::allocate(unsigned int)]+0x1d): undefined reference to `std::__default_alloc_t&lt;br /&gt;
 emplate&amp;lt;true, 0&amp;gt;::allocate(unsigned int)&#039;&lt;br /&gt;
 /usr/win32/lib/libebml.a(EbmlMaster.o):EbmlMaster.cpp:(.text$_ZNSt14__simple_all&lt;br /&gt;
 ocIPN7libebml11EbmlElementESt24__default_alloc_templateILb1ELi0EEE10deallocateEP&lt;br /&gt;
 S2_j[std::__simple_alloc&amp;lt;libebml::EbmlElement*, std::__default_alloc_template&amp;lt;tr&lt;br /&gt;
 ue, 0&amp;gt; &amp;gt;::deallocate(libebml::EbmlElement**, unsigned int)]+0x1d): undefined ref&lt;br /&gt;
 erence to `std::__default_alloc_template&amp;lt;true, 0&amp;gt;::deallocate(void*, unsigned in&lt;br /&gt;
 t)&#039;&lt;br /&gt;
 collect2: ld returned 1 exit status&lt;br /&gt;
 make[2]: *** [vlc.exe] Error 1&lt;br /&gt;
&lt;br /&gt;
This problem is because libEbml is a C++ lib and it doesn&#039;t seem to link with gcc 3.4.&lt;br /&gt;
&lt;br /&gt;
FIX: Use gcc 3.3 with the according 3.3 Win32 &amp;quot;contrib&amp;quot; package version or use a Win32 &amp;quot;contrib&amp;quot; package for 3.4 (or even better try compiling it yourself).&lt;br /&gt;
&lt;br /&gt;
WORKAROUND for gcc 3.4: Use --disable-mkv in configure-vlc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==zip: command not found==&lt;br /&gt;
&lt;br /&gt;
A make package fails with the following error:&lt;br /&gt;
&lt;br /&gt;
 zip -r vlc-0.8.4-svn-win32.zip vlc-0.8.4-svn&lt;br /&gt;
 /bin/bash: line 1: zip: command not found&lt;br /&gt;
 make: *** [package-win32-base-zip] Error 127&lt;br /&gt;
&lt;br /&gt;
FIX: Doh! forgot to install the zip package in Cygwin :P&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==vlc.exe: Permission denied==&lt;br /&gt;
&lt;br /&gt;
A make finished successfully and produced vlc.exe, but running the executable returns the following:&lt;br /&gt;
&lt;br /&gt;
 bash: ./vlc.exe: Permission denied&lt;br /&gt;
&lt;br /&gt;
The permissions on both vlc.exe &amp;amp; vlc.exe.manifest must be set to executable. &lt;br /&gt;
&lt;br /&gt;
FIX: Type the following:&lt;br /&gt;
 &lt;br /&gt;
 chmod 755 vlc.exe vlc.exe.manifest&lt;br /&gt;
&lt;br /&gt;
==error: parse error before &#039;(&#039; token==&lt;br /&gt;
&lt;br /&gt;
A make (compile) of FFmpeg results in the following error:&lt;br /&gt;
&lt;br /&gt;
 /usr/include/sys/unistd.h:203: error: parse error before &#039;(&#039; token&lt;br /&gt;
 make[1]: *** [ffm.o] Error 1&lt;br /&gt;
&lt;br /&gt;
It&#039;s very likely you are usix the POSIX emulater which you shouldn&#039;t...&lt;br /&gt;
&lt;br /&gt;
FIX: compile with the option &lt;br /&gt;
&lt;br /&gt;
 -mno-cygwin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: invalid conversion from `const void*&#039; to `void*&#039;==&lt;br /&gt;
&lt;br /&gt;
 src/theme_loader.cpp: In function `int gzwrite_frontend(int, const void*, size_t)&#039;:&lt;br /&gt;
 src/theme_loader.cpp:599: error: invalid conversion from `const void*&#039; to `void*&#039;&lt;br /&gt;
 src/theme_loader.cpp:599: error:   initializing argument 2 of `int gzwrite(void*,&lt;br /&gt;
 void*, unsigned int)&#039;&lt;br /&gt;
 make[6]: *** [libskins2_plugin_a-theme_loader.o] Error 1&lt;br /&gt;
&lt;br /&gt;
FIX: This is related to a problem with the zlib library, updating to at least 1.2.2-1 but preferably 1.2.3 or newer is required&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: cannot convert `const wxChar*&#039; to `const char*==&lt;br /&gt;
&lt;br /&gt;
 if g++ -mno-cygwin -DHAVE_CONFIG_H -I. -I. -I../../..   -I/usr/win32/include -I/&lt;br /&gt;
 usr/win32/include/ebml -D_OFF_T_ -D_off_t=long -DSYS_MINGW32 -I../../../include&lt;br /&gt;
 `top_builddir=&amp;quot;../../..&amp;quot; ../../../vlc-config --cxxflags plugin wxwidgets` -Wsign&lt;br /&gt;
 -compare -Wsign-compare -Wall  -mms-bitfields -pipe -MT libwxwidgets_plugin_a-wx&lt;br /&gt;
 widgets.o -MD -MP -MF &amp;quot;.deps/libwxwidgets_plugin_a-wxwidgets.Tpo&amp;quot; -c -o libwxwid&lt;br /&gt;
 gets_plugin_a-wxwidgets.o `test -f &#039;wxwidgets.cpp&#039; || echo &#039;./&#039;`wxwidgets.cpp; \&lt;br /&gt;
 then mv -f &amp;quot;.deps/libwxwidgets_plugin_a-wxwidgets.Tpo&amp;quot; &amp;quot;.deps/libwxwidgets_plugi&lt;br /&gt;
 n_a-wxwidgets.Po&amp;quot;; else rm -f &amp;quot;.deps/libwxwidgets_plugin_a-wxwidgets.Tpo&amp;quot;; exit&lt;br /&gt;
 1; fi&lt;br /&gt;
 In file included from /usr/win32/include/wx-2.6/wx/debug.h:22,&lt;br /&gt;
                  from /usr/win32/include/wx-2.6/wx/defs.h:452,&lt;br /&gt;
                  from /usr/win32/include/wx-2.6/wx/wxprec.h:13,&lt;br /&gt;
                  from wxwidgets.h:40,&lt;br /&gt;
                  from wxwidgets.cpp:39:&lt;br /&gt;
 /usr/win32/include/wx-2.6/wx/wxchar.h: In function `size_t wxStrlen(const wxChar&lt;br /&gt;
 *)&#039;:&lt;br /&gt;
 /usr/win32/include/wx-2.6/wx/wxchar.h:759: error: cannot convert `const wxChar*&#039;&lt;br /&gt;
  to `const char*&#039; for argument `1&#039; to `size_t strlen(const char*)&#039;&lt;br /&gt;
 In file included from /usr/win32/include/wx-2.6/wx/memory.h:20,&lt;br /&gt;
                  from /usr/win32/include/wx-2.6/wx/object.h:25,&lt;br /&gt;
                  from /usr/win32/include/wx-2.6/wx/wx.h:16,&lt;br /&gt;
                  from wxwidgets.h:41,&lt;br /&gt;
                  from wxwidgets.cpp:39:&lt;br /&gt;
 /usr/win32/include/wx-2.6/wx/string.h: In constructor `wxString::wxString(const&lt;br /&gt;
 wxChar*)&#039;:&lt;br /&gt;
&lt;br /&gt;
FIX: update wxwidgets or try a different or newer Win32 &amp;quot;contrib&amp;quot; package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==undefined reference to `_av_parser_change&#039; (FFmpeg)==&lt;br /&gt;
&lt;br /&gt;
 ffmpeg.o: In function `output_packet&#039;:&lt;br /&gt;
 /home/Administrator/FFmpeg-20050724/ffmpeg.c:1414: undefined reference to `_av_parser_change&#039;&lt;br /&gt;
 /home/Administrator/FFmpeg-20050724/ffmpeg.c:1415: undefined reference to `_av_destruct_packet&#039;&lt;br /&gt;
 collect2: ld returned 1 exit status&lt;br /&gt;
 make: *** [ffmpeg_g.exe] Error 1&lt;br /&gt;
&lt;br /&gt;
This is a possible conflict when you use normal configure-ffmpeg (uses /usr/win32&lt;br /&gt;
contrib) instead of configure-ffmpeg-svn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==undefined reference to `_pp_get_context&#039; (FFmpeg)==&lt;br /&gt;
&lt;br /&gt;
 ./modules/codec/ffmpeg/libffmpeg.a(libffmpeg_a-postprocess.o): In function `Init&lt;br /&gt;
 Postproc__ffmpeg&#039;:&lt;br /&gt;
 /home/Administrator/vlc-trunk/modules/codec/ffmpeg/postprocess.c:164: undefined&lt;br /&gt;
 reference to `_pp_get_context&#039;&lt;br /&gt;
 ./modules/codec/ffmpeg/libffmpeg.a(libffmpeg_a-postprocess.o): In function `PPQC&lt;br /&gt;
 allback&#039;:&lt;br /&gt;
 /home/Administrator/vlc-trunk/modules/codec/ffmpeg/postprocess.c:244: undefined&lt;br /&gt;
 reference to `_pp_get_mode_by_name_and_quality&#039;&lt;br /&gt;
 ./modules/codec/ffmpeg/libffmpeg.a(libffmpeg_a-postprocess.o): In function `Post&lt;br /&gt;
 procPict__ffmpeg&#039;:&lt;br /&gt;
 /home/Administrator/vlc-trunk/modules/codec/ffmpeg/postprocess.c:191: undefined&lt;br /&gt;
 reference to `_pp_postprocess&#039;&lt;br /&gt;
 $&lt;br /&gt;
 ePostproc__ffmpeg&#039;:&lt;br /&gt;
 /home/Administrator/vlc-trunk/modules/codec/ffmpeg/postprocess.c:209: undefined&lt;br /&gt;
 reference to `_pp_free_mode&#039;&lt;br /&gt;
 /home/Administrator/vlc-trunk/modules/codec/ffmpeg/postprocess.c:210: undefined&lt;br /&gt;
 reference to `_pp_free_context&#039;&lt;br /&gt;
 collect2: ld returned 1 exit status&lt;br /&gt;
 make[2]: *** [vlc.exe] Error 1&lt;br /&gt;
 make[2]: Leaving directory `/home/Administrator/vlc-trunk&#039;&lt;br /&gt;
 make[1]: *** [all-recursive] Error 1&lt;br /&gt;
 make[1]: Leaving directory `/home/Administrator/vlc-trunk&#039;&lt;br /&gt;
 make: *** [all] Error 2&lt;br /&gt;
&lt;br /&gt;
FFmpeg was not compiled with post processing support. To do so the following options need to be added to the configure lines for FFmpeg:&lt;br /&gt;
&lt;br /&gt;
 --enable-pp --enable-gpl&lt;br /&gt;
&lt;br /&gt;
Postprocessing code is under GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token==&lt;br /&gt;
&lt;br /&gt;
 In file included from /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32&lt;br /&gt;
 api/windows.h:52,&lt;br /&gt;
                  from ../../../include/vlc_common.h:459,&lt;br /&gt;
                  from ../../../include/vlc/vlc.h:153,&lt;br /&gt;
                  from dshow.cpp:31:&lt;br /&gt;
 /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../include/w32api/wingdi.h:3:1: warn&lt;br /&gt;
 ing: this is the location of the previous definition&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:14: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:35,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/ddraw.h:5552: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:45,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/strmif.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dsound.h:13,&lt;br /&gt;
                  from /usr/win32/include/amaudio.h:18,&lt;br /&gt;
                  from /usr/win32/include/dshow.h:47,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:22: warning: ignoring #pragma warning&lt;br /&gt;
 /usr/win32/include/d3dtypes.h:1813: warning: ignoring #pragma warning&lt;br /&gt;
 In file included from /usr/win32/include/dshow.h:48,&lt;br /&gt;
                  from common.h:45,&lt;br /&gt;
                  from dshow.cpp:35:&lt;br /&gt;
 /usr/win32/include/control.h:2: warning: ignoring #pragma warning&lt;br /&gt;
 dshow.cpp: In function `int CommonOpen(vlc_object_t*, access_sys_t*, vlc_bool_t)&lt;br /&gt;
 &#039;:&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;&amp;lt;&#039; token&lt;br /&gt;
 dshow.cpp:456: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;==&#039; token&lt;br /&gt;
 dshow.cpp:470: error: expected primary-expression before &#039;=&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;&amp;gt;&#039; token&lt;br /&gt;
 dshow.cpp:484: error: expected primary-expression before &#039;.&#039; token&lt;br /&gt;
 dshow.cpp:485: error: expected `;&#039; before &amp;quot;IAMCrossbar&amp;quot;&lt;br /&gt;
 dshow.cpp:491: error: `pXbar&#039; undeclared (first use this function)&lt;br /&gt;
 dshow.cpp:491: error: (Each undeclared identifier is reported only once for each&lt;br /&gt;
 function it appears in.)&lt;br /&gt;
 make[6]: *** [libdshow_plugin_a-dshow.o] Error 1&lt;br /&gt;
 make[6]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[5]: *** [all-modules] Error 1&lt;br /&gt;
 make[5]: Leaving directory `/home/Administrator/vlc-trunk/modules/access/dshow&#039;&lt;br /&gt;
 make[4]: *** [all-recursive] Error 1&lt;br /&gt;
 make[4]: Leaving directory `/home/Administrator/vlc-trunk/modules/access&#039;&lt;br /&gt;
 make[3]: *** [all] Error 2&lt;br /&gt;
&lt;br /&gt;
Basically in case of conflict svn adds &amp;quot;&amp;lt;&amp;lt;&amp;lt; mine&amp;quot; and &amp;quot;=======&amp;quot; and &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt; r1242&amp;quot; which makes gcc complain.&lt;br /&gt;
&lt;br /&gt;
FIX: revert the offending file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==configure: error: Could not find ffmpeg on your system==&lt;br /&gt;
&lt;br /&gt;
 configure: error: Could not find ffmpeg on your system: you may get it from&lt;br /&gt;
 http://ffmpeg.sf.net/ (cvs version is recommended). Alternatively you can use&lt;br /&gt;
 --disable-ffmpeg to disable the ffmpeg plugins.&lt;br /&gt;
 make: *** [config.status] Error 1&lt;br /&gt;
&lt;br /&gt;
This can happen when you do a make without doing a configure and the configure.ac file in the source code recently updated.&lt;br /&gt;
&lt;br /&gt;
FIX: do a full configure (using ../configure-vlc.sh) and then run the make process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Objective C source seen but `OBJC&#039; is undefined==&lt;br /&gt;
&lt;br /&gt;
The configure process stops halfway.&lt;br /&gt;
&lt;br /&gt;
 + aclocal-1.9 -I m4&lt;br /&gt;
 + autoconf&lt;br /&gt;
 + autoheader&lt;br /&gt;
 + automake-1.9 --add-missing --copy -Wall&lt;br /&gt;
 configure.ac: installing `autotools/install-sh&#039;&lt;br /&gt;
 configure.ac: installing `autotools/missing&#039;&lt;br /&gt;
 activex/Makefile.am:143: shell $(VLC_CONFIG: non-POSIX variable name&lt;br /&gt;
 activex/Makefile.am:143: (probably a GNU make extension)&lt;br /&gt;
 activex/Makefile.am: installing `autotools/compile&#039;&lt;br /&gt;
 activex/Makefile.am: installing `autotools/depcomp&#039;&lt;br /&gt;
 modules/gui/macosx/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 modules/misc/testsuite/Makefile.am: Objective C source seen but `OBJC&#039; is undefi&lt;br /&gt;
 ned&lt;br /&gt;
 src/Makefile.am: Objective C source seen but `OBJC&#039; is undefined&lt;br /&gt;
 Makefile.am:282: user target `vlc$(EXEEXT)&#039; defined here...&lt;br /&gt;
 /usr/share/automake-1.9/am/program.am: ... overrides Automake target `vlc$(EXEEX&lt;br /&gt;
 T)&#039; defined here&lt;br /&gt;
 Makefile.am:230:   while processing program `vlc&#039;&lt;br /&gt;
 make: *** No targets specified and no makefile found.  Stop.&lt;br /&gt;
 &lt;br /&gt;
This problem is related to a warning earlier on and only occured in a few revisions where a built-in workaround wasn&#039;t working properly:&lt;br /&gt;
&lt;br /&gt;
 + echo &#039;Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&#039;&lt;br /&gt;
 Enabling provisional autoconf 2.59 work-around. Update autoconf ASAP.&lt;br /&gt;
&lt;br /&gt;
FIX: update autoconf to 2.60 or newer. If Cygwin doesn&#039;t provide this version yet then build it yourself from extras/contrib.&lt;br /&gt;
&lt;br /&gt;
Enter the following commands in your Cygwin shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/extras/contrib&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
 make .autoconf&lt;br /&gt;
&lt;br /&gt;
There should now be compiled autoconf version (probably 2.60 or newer) in extras/contrib that the bootstrap process will use.&lt;br /&gt;
&lt;br /&gt;
Now start the whole &amp;quot;Compile VLC&amp;quot; process from the start again.&lt;br /&gt;
&lt;br /&gt;
==Error: cannot create temporary file for diversion: Permission denied==&lt;br /&gt;
&lt;br /&gt;
If the above error appears, it might mean you don&#039;t have the TMPDIR defined in cygwin. You will need to define it and have its value point to your temporary directory.&lt;br /&gt;
&lt;br /&gt;
=Version=&lt;br /&gt;
&lt;br /&gt;
20050627 Initial version&lt;br /&gt;
&lt;br /&gt;
20050628 Updated some more exceptions&lt;br /&gt;
&lt;br /&gt;
20050628 Some info added about FFmpeg compiling with AMR&lt;br /&gt;
&lt;br /&gt;
20050629 Finalized FFmpeg compiling&lt;br /&gt;
&lt;br /&gt;
20050630 Cross-compiling&lt;br /&gt;
&lt;br /&gt;
20050724 Some extra compile explanations&lt;br /&gt;
&lt;br /&gt;
20050726 Removed cross-compiling (was for linux -&amp;gt; win32) Patching source code with .diff files&lt;br /&gt;
&lt;br /&gt;
20050823 Added zlib error&lt;br /&gt;
&lt;br /&gt;
20050923 --enable-sdl --with-sdl-config-path=/usr/win32/bin added to configure. Added debug section&lt;br /&gt;
&lt;br /&gt;
20051102 Changed FFmpeg lib names&lt;br /&gt;
&lt;br /&gt;
20051128 Detailed Cygwin upgrade/downgrade for gcc 3.3. Renamed some update scripts. Added FFmpeg CVS update. --disable-gnomevfs added to configure (only used on linux)&lt;br /&gt;
&lt;br /&gt;
20060121 PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig added to configure&lt;br /&gt;
&lt;br /&gt;
20060128 Added curl and libtool to Cygwin for those that want to be able to build extras/contrib themselves&lt;br /&gt;
&lt;br /&gt;
20060217 Added make install-libs install-headers to FFmpeg compile&lt;br /&gt;
&lt;br /&gt;
20060222 Remark about missing &amp;quot;gettext&amp;quot; libs for Cygwin during install&lt;br /&gt;
&lt;br /&gt;
20060225 ./bootstrap: you need libtool&lt;br /&gt;
&lt;br /&gt;
20060618 Updated GCC to 3.4 version and added FFmpeg SVN and DTS support&lt;br /&gt;
&lt;br /&gt;
20060805 Added note about using older binutils and gdb for Cygwin!&lt;br /&gt;
&lt;br /&gt;
20060915 Added note about updating autoconf from extras/contrib for an OBJC problem during configure&lt;br /&gt;
&lt;br /&gt;
20061108 Added note this document is no longer usable since Cygwin has been unusable probably related to some bash/dos2unix change&lt;br /&gt;
&lt;br /&gt;
20070612 Added note about --enable-dca&lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:Coding]]&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=Win32CompileMSYSOld&amp;diff=10184</id>
		<title>Win32CompileMSYSOld</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=Win32CompileMSYSOld&amp;diff=10184"/>
		<updated>2007-11-08T22:17:23Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MSYS/MinGW environment for Windows from http://developers.videolan.org/vlc/msys-compile.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO: GPAC, NSIS, PKG-Config, more than just setting up the environment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
THIS ARTICLE IS UNDER CONSTRUCTION!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=MSYS/MinGW environment=&lt;br /&gt;
&lt;br /&gt;
Setting up a working MSYS/MinGW environment requires the following:&lt;br /&gt;
&lt;br /&gt;
* MSYS installation&lt;br /&gt;
* Updating MSYS&lt;br /&gt;
* MSYS DTK (Developer Tool Kit)&lt;br /&gt;
* Updating bash (shell)&lt;br /&gt;
* MinGW installation&lt;br /&gt;
* Configuration of fstab&lt;br /&gt;
* Creation of home folder&lt;br /&gt;
&lt;br /&gt;
Note that the following generic resource locations were used to download the appropriate packages (and more recent versions might be obtained from here):&lt;br /&gt;
&lt;br /&gt;
[http://prdownloads.sourceforge.net/mingw MSYS/MinGW related]&lt;br /&gt;
&lt;br /&gt;
[http://prdownloads.sourceforge.net/nasm nasm]&lt;br /&gt;
&lt;br /&gt;
[http://www.libsdl.org SDL]&lt;br /&gt;
&lt;br /&gt;
[http://www.info-zip.org zip]&lt;br /&gt;
&lt;br /&gt;
[http://pkgconfig.freedesktop.org/releases pkg-config]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.gnu.org/pub/gnu/sed sed]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Minimal SYStem (MSYS) installation==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-2004.04.30-1.exe&lt;br /&gt;
&lt;br /&gt;
Perform a basic installation into C:\msys&lt;br /&gt;
&lt;br /&gt;
Do not continue with the post install (this will be done later).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Update MSYS==&lt;br /&gt;
&lt;br /&gt;
Update MSYS to a more recent version&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-20060807.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file, it contains the following files:&lt;br /&gt;
&lt;br /&gt;
 mount.exe&lt;br /&gt;
 msys-1.0.dll&lt;br /&gt;
 ps.exe&lt;br /&gt;
&lt;br /&gt;
Copy the files to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\bin&lt;br /&gt;
&lt;br /&gt;
This will overwrite/update the version(s) used in MSYS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MSYS DTK (Developer Tool Kit)==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe&lt;br /&gt;
&lt;br /&gt;
Perform a basic installation into C:\msys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating BASH==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file, in the bin subfolder it contains the following files:&lt;br /&gt;
&lt;br /&gt;
 bash.exe&lt;br /&gt;
 sh.exe&lt;br /&gt;
&lt;br /&gt;
Copy the files to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\bin&lt;br /&gt;
&lt;br /&gt;
This will overwrite/update the sh.exe version used in MSYS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MinGW==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/MinGW-5.0.3.exe&lt;br /&gt;
&lt;br /&gt;
Select the download option.&lt;br /&gt;
&lt;br /&gt;
Do not install with &amp;quot;Current&amp;quot; MinGW packages but select &amp;quot;Candidate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Select the following components to install:&lt;br /&gt;
&lt;br /&gt;
 MinGW base tools (autoselected)&lt;br /&gt;
 g++ compiler&lt;br /&gt;
&lt;br /&gt;
Then installation will finish downloading automatically.&lt;br /&gt;
&lt;br /&gt;
Run MinGW-5.0.3.exe again and select the download and install option to restart the installation. &lt;br /&gt;
&lt;br /&gt;
Selet &amp;quot;Candidate&amp;quot; still and select the same components to install.&lt;br /&gt;
&lt;br /&gt;
Perform the installation into the default destination:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw&lt;br /&gt;
&lt;br /&gt;
The following versions (or possibly newer) of the candidate packages will be&lt;br /&gt;
downloaded and installed:&lt;br /&gt;
&lt;br /&gt;
 mingw-runtime-3.10.tar.gz&lt;br /&gt;
 w32api-3.7.tar.gz&lt;br /&gt;
 binutils-2.16.91-20060119-1.tar.gz&lt;br /&gt;
 gcc-core-3.4.5-20060117-1.tar.gz&lt;br /&gt;
 gcc-g++-3.4.5-20060117-1.tar.gz&lt;br /&gt;
&lt;br /&gt;
(It is also possible to get these packages seperately and extract them to C:\msys\mingw)&lt;br /&gt;
&lt;br /&gt;
==Configuring fstab==&lt;br /&gt;
&lt;br /&gt;
The folder C:\msys\etc contains the following file:&lt;br /&gt;
&lt;br /&gt;
 fstab.sample&lt;br /&gt;
&lt;br /&gt;
Copy the file to:&lt;br /&gt;
&lt;br /&gt;
 fstab&lt;br /&gt;
&lt;br /&gt;
Open the file with a text editor and change the path value for the mingw mount point from:&lt;br /&gt;
&lt;br /&gt;
 c:/mingw to c:/msys/mingw&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Starting MSYS==&lt;br /&gt;
&lt;br /&gt;
The first time MSYS is started, a &amp;quot;home&amp;quot; folder is created, for example:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Installing additional packages=&lt;br /&gt;
&lt;br /&gt;
The following packages are required for building VLC&lt;br /&gt;
&lt;br /&gt;
* Wget&lt;br /&gt;
* Iconv&lt;br /&gt;
* Gettext&lt;br /&gt;
* MinGW utils&lt;br /&gt;
* Libtool&lt;br /&gt;
* Autoconf&lt;br /&gt;
* Automake&lt;br /&gt;
* Zip&lt;br /&gt;
* Coreutils&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==WGet==&lt;br /&gt;
&lt;br /&gt;
Wget is required for building from the &amp;quot;extras/contrib&amp;quot; or mingwPORT packages.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/wget-1.9.1-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Although this is a mingwPORT package it already has a precompiled wget on board.&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. It contains the following file in the bin subfolder:&lt;br /&gt;
&lt;br /&gt;
 wget.exe&lt;br /&gt;
&lt;br /&gt;
Copy the file to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw\bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Iconv (GNU libiconv)==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/libiconv-1.8.0-2003.02.01-1.exe&lt;br /&gt;
&lt;br /&gt;
Perform a basic installation into the default destination Folder&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating Iconv===&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/libiconv-1.10-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd libiconv-1.10-mingwPORT/libiconv-1.10/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/libiconv-1.10&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into c:/msys/mingw/lib.&lt;br /&gt;
&lt;br /&gt;
NOTE: For some unknown reason usage of Iconv fails when 1.10 is installed directly without having installed 1.8.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gettext==&lt;br /&gt;
&lt;br /&gt;
This approach breaks libiconv.. under investigation..&lt;br /&gt;
&lt;br /&gt;
http://downloads.sourceforge.net/mingw/gettext-0.16.1-1-bin.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Untar this packet and copy the files in the subdirectories under gettext-0.16.1-1-bin/usr/local to the corresponding subdirectories under C:\msys\mingw.&lt;br /&gt;
For example:&lt;br /&gt;
       copy gettext-0.16.1-1-bin/usr/local/lib/*.* to  C:\msys\mingw\lib\&lt;br /&gt;
      ......................................................&lt;br /&gt;
Note:&lt;br /&gt;
   The latest VLC from svn requires gettext-0.16.xx to build.&lt;br /&gt;
&lt;br /&gt;
==MinGW Utils==&lt;br /&gt;
&lt;br /&gt;
The unix2dos tool from this package is required during the &amp;quot;make package&amp;quot; process of VLC for some conversion of txt files.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/mingw-utils-0.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.gz file. it contains the following file in the bin subfolder:&lt;br /&gt;
&lt;br /&gt;
 unix2dos.exe&lt;br /&gt;
&lt;br /&gt;
Copy the file to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw\bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libtool==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/libtool-1.5.22-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd libtool-1.5.22-mingwPORT/libtool-1.5.22/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/libtool-1.5.22&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into c:/msys/mingw/lib.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Autoconf==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/autoconf-2.59-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd autoconf-2.59-mingwPORT/autoconf-2.59/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/autoconf-2.59&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into c:/msys/mingw/lib.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating autoconf from contrib==&lt;br /&gt;
&lt;br /&gt;
VLC 0.8.6 and later (including 0.9.0 svn/development) require an autoconf version&lt;br /&gt;
of 2.60 or greater.&lt;br /&gt;
&lt;br /&gt;
If during the configure process the following msg appears it&#039;s time to update:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Hey, your autoconf is quite old. Update it&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Open your MSYS shell:&lt;br /&gt;
&lt;br /&gt;
 cd vlc-trunk/extras/contrib&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
 make .autoconf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Automake==&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/automake-1.9.5-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd automake-1.9.5-mingwPORT/automake-1.9.5/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/automake-1.9.5&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into c:/msys/mingw/lib.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Zip==&lt;br /&gt;
&lt;br /&gt;
Zip is required for making .zip packages...&lt;br /&gt;
&lt;br /&gt;
http://www.info-zip.org/&lt;br /&gt;
&lt;br /&gt;
ftp://ftp.info-zip.org/pub/infozip/WIN32/zip232xN.zip&lt;br /&gt;
&lt;br /&gt;
Extract the .zip. It contains the following file in the bin subfolder:&lt;br /&gt;
&lt;br /&gt;
 zip.exe&lt;br /&gt;
&lt;br /&gt;
Copy the file to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Coreutils==&lt;br /&gt;
&lt;br /&gt;
The whoami tool from this package is required for &amp;quot;svn builds&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. it contains the following file in the bin subfolder:&lt;br /&gt;
&lt;br /&gt;
 whoami.exe&lt;br /&gt;
&lt;br /&gt;
Copy the file to:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw\bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Optional packages=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GDB (optional)==&lt;br /&gt;
&lt;br /&gt;
GDB is used for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/gdb-6.3-2.exe&lt;br /&gt;
&lt;br /&gt;
Perform an installation into the folder&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ZLib (optional)==&lt;br /&gt;
&lt;br /&gt;
Zlib is a required package in combination with the Gpac package for .avs and&lt;br /&gt;
.mp4 output support when building the x264 library.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/zlib-1.2.3-mingwPORT-1.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\Administrator (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd zlib-1.2.3-mingwPORT/zlib-1.2.3/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/zlib-1.2.3&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
 Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into c:/msys/mingw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Updating SDL from mingwPORT (optional)==&lt;br /&gt;
&lt;br /&gt;
SDL support is required when building ffplay from the FFmpeg package.&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/mingw/SDL-1.2.8-mingwPORT.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.bz2 file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\SDL-1.2.8-mingwPORT (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd SDL-1.2.8-minwPORT/SDL-1.2.8/mingwPORT&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /usr/src/SDL-1.2.8&lt;br /&gt;
&lt;br /&gt;
 ./mingwPORT.sh &lt;br /&gt;
&lt;br /&gt;
Follow the default installation.&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into /usr/local/lib.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating SDL (optional)===&lt;br /&gt;
&lt;br /&gt;
http://www.libsdl.org/release/SDL-1.2.11.tar.gz&lt;br /&gt;
&lt;br /&gt;
Extract the .tar.gz file. Copy the contents into your home folder in MSYS&lt;br /&gt;
&lt;br /&gt;
 C:\msys\home\SDL-1.2.11 (example)&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cd SDL-1.2.11&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
If all went well all the appropriate libraries should be installed/built and placed into /usr/local/lib.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Nasm (optional)==&lt;br /&gt;
&lt;br /&gt;
The Netwide assembler (nasm) is required for building the x264 library.&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/project/showfiles.php?group_id=6208&lt;br /&gt;
&lt;br /&gt;
Download the latest win32 binaries:&lt;br /&gt;
&lt;br /&gt;
http://prdownloads.sourceforge.net/nasm/nasm-0.98.39-win32.zip?download&lt;br /&gt;
&lt;br /&gt;
Extract the .zip. It contains the following file in the bin subfolder:&lt;br /&gt;
&lt;br /&gt;
 nasmw.exe&lt;br /&gt;
&lt;br /&gt;
Rename the file to nasm.exe and copy it to the following location:&lt;br /&gt;
&lt;br /&gt;
 C:\msys\mingw\bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GPAC (optional)==&lt;br /&gt;
&lt;br /&gt;
GPAC is required for building the x264 library with mp4 output support.&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac&lt;br /&gt;
&lt;br /&gt;
This will download the latest GPAC version from CVS.&lt;br /&gt;
&lt;br /&gt;
 cd gpac&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
 make install-lib&lt;br /&gt;
&lt;br /&gt;
TODO: copy GPAC files to appropriate folder automagically.&lt;br /&gt;
&lt;br /&gt;
==x264 (optional)==&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 svn co svn://svn.videolan.org/x264/trunk x264-trunk&lt;br /&gt;
&lt;br /&gt;
 cd x264-trunk&lt;br /&gt;
&lt;br /&gt;
For generic purposes:&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
For VLC:&lt;br /&gt;
&lt;br /&gt;
 ./configure --prefix=/usr/win32&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
This will copy the appropriate libs and .h to the prefix folder which will also be used by VLC for building the contrib&lt;br /&gt;
&lt;br /&gt;
For compiling &amp;quot;stand-alone with mp4 output support&amp;quot; (this requires GPAC):&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mp4-output&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you wish to compile FFmpeg stand-alone with x264 support then also do this&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
This will copy the appropriate libs and .h files to the default /usr/lib and /usr/include&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==FFmpeg (optional)==&lt;br /&gt;
&lt;br /&gt;
Start the MSYS shell and do the following commands:&lt;br /&gt;
&lt;br /&gt;
 svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg-trunk&lt;br /&gt;
&lt;br /&gt;
 cd ffmpeg-trunk&lt;br /&gt;
&lt;br /&gt;
For generic purposes:&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mingw32 --enable-memalign-hack \&lt;br /&gt;
    --enable-gpl --enable-pp&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
For compiling with x264 support:&lt;br /&gt;
&lt;br /&gt;
(This assumes you did a &amp;quot;make install&amp;quot; for x264 which will have copied the appropriate lib and .h files into lib/include).&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mingw32 --enable-memalign-hack \&lt;br /&gt;
    --extra-cflags=-I/usr/local/include \&lt;br /&gt;
    --extra-ldflags=-L/usr/local/lib \&lt;br /&gt;
    --enable-gpl --enable-pp --enable-x264&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
For compiling into VLC:&lt;br /&gt;
&lt;br /&gt;
(This does not need x264 lib in FFmpeg since VLC uses that directly, also prefix and extra flags are used to point to the &amp;quot;contrib&amp;quot; folder):&lt;br /&gt;
&lt;br /&gt;
 ./configure --enable-mingw32 --enable-memalign-hack \&lt;br /&gt;
    --extra-cflags=-I/usr/win32/include \&lt;br /&gt;
    --extra-ldflags=-L/usr/win32/lib \&lt;br /&gt;
    --prefix=/usr/win32 \&lt;br /&gt;
    --enable-faac --enable-mp3lame --enable-gpl --enable-pp&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
 make install-libs install-headers&lt;br /&gt;
&lt;br /&gt;
This will copy all the appropriate libs and .h files into usr/win32/include and lib so they can be used by VLC compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
&lt;br /&gt;
Various troubleshooting issues..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Make .qt4 from extras/contrib==&lt;br /&gt;
&lt;br /&gt;
Fails on:&lt;br /&gt;
&lt;br /&gt;
 checking for libmpeg2.a in /home/Administrator/vlc-trunk/./extras/contrib/src/mpeg2dec... no&lt;br /&gt;
 configure: error: cannot cd to /home/Administrator/vlc-trunk/./extras/contrib/src/mpeg2dec&lt;br /&gt;
&lt;br /&gt;
Workaround: configure with &lt;br /&gt;
 &lt;br /&gt;
 --without-contrib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Make package-win32-zip==&lt;br /&gt;
&lt;br /&gt;
Fails on:&lt;br /&gt;
&lt;br /&gt;
 sed -i &#039;s%share/osdmenu%osdmenu%g&#039; ./vlc-0.9.0-svn/osdmenu/*.cfg&lt;br /&gt;
 sed: invalid option -- i&lt;br /&gt;
&lt;br /&gt;
Workaround: compile sed 4.09 (any newer versions fail to compile on missing alloca)&lt;br /&gt;
&lt;br /&gt;
ftp://ftp.gnu.org/pub/gnu/sed/sed-4.0.9.tar.gz&lt;br /&gt;
&lt;br /&gt;
use the newer sed version in c:\msys\mingw\bin and rename the old one to sed3.exe or something&lt;br /&gt;
&lt;br /&gt;
ONLY use the 4.09 sed to do a make package-win32-zip, it will fail to compile VLC source&lt;br /&gt;
(so after it finishes, you have to copy the old version back again).&lt;br /&gt;
&lt;br /&gt;
So in conclusion:&lt;br /&gt;
&lt;br /&gt;
 make package-win32-zip fails with sed 3.02 on -i&lt;br /&gt;
 make autoconf fails with sed 4.09 on -E&lt;br /&gt;
 sed 4.10+ requires glib&lt;br /&gt;
 glib requires pkgconfig but pkgconfig requires glib?!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Warnings during configure==&lt;br /&gt;
&lt;br /&gt;
Using contrib from 20061015 still a lot of warnings during configure:&lt;br /&gt;
&lt;br /&gt;
 checking dynamic linker characteristics... ./configure: line 14697: f77: command not found&lt;br /&gt;
 ./configure: line 14825: f77: command not found&lt;br /&gt;
&lt;br /&gt;
 configure: WARNING: libshout library not found&lt;br /&gt;
 configure: WARNING: MusicBrainz library not found&lt;br /&gt;
 configure: WARNING: CD Reading and information library not found&lt;br /&gt;
 configure: WARNING: VCD information library not found&lt;br /&gt;
 configure: WARNING: new enough libcddb not found. CDDB access disabled&lt;br /&gt;
&lt;br /&gt;
 checking for mpcdec/mpcdec.h... yes&lt;br /&gt;
 configure: WARNING: only static linking is available, you must provide a gme-tree&lt;br /&gt;
&lt;br /&gt;
 ./configure: line 54814: --exists: command not found&lt;br /&gt;
&lt;br /&gt;
 configure: WARNING: Probe disc disabled because ok libcdio library not found&lt;br /&gt;
 configure: WARNING: VCD information on Probe disc disabled because ok&lt;br /&gt;
 libvcdinfo not found&lt;br /&gt;
 configure: WARNING: QT4 library not found&lt;br /&gt;
 configure: WARNING: DAAP library not found&lt;br /&gt;
 configure: WARNING: avahi-client library not found&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Can not write to output file with unix2dos==&lt;br /&gt;
&lt;br /&gt;
 unix2dos: converting file ./vlc-0.9.0-svn/AUTHORS.txt to DOS format ...&lt;br /&gt;
 unix2dos: can not write to output file&lt;br /&gt;
 unix2dos: problems converting file ./vlc-0.9.0-svn/AUTHORS.txt&lt;br /&gt;
 unix2dos: converting file ./vlc-0.9.0-svn/MAINTAINERS.txt to DOS format ...&lt;br /&gt;
 unix2dos: converting file ./vlc-0.9.0-svn/THANKS.txt to DOS format ...&lt;br /&gt;
 unix2dos: can not write to output file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Version=&lt;br /&gt;
&lt;br /&gt;
20060926 Initial version&lt;br /&gt;
&lt;br /&gt;
20060928 Reworked layout&lt;br /&gt;
&lt;br /&gt;
20061011 Added troubleshooting section&lt;br /&gt;
&lt;br /&gt;
20061119 Added FFmpeg and x264. Removed unicode warning from troubleshooting&lt;br /&gt;
&lt;br /&gt;
20070113 WIKI version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:Coding]]&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10145</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10145"/>
		<updated>2007-10-24T20:53:18Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
10, 12, 13, 14, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4 (in trac): play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
*** http://trac.videolan.org/vlc/ticket/1344&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX (fixed): play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
* WONTFIX&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
8 QT4 (duplicate of issue 1): shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
* not might, is [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4 (wontfix): extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
* no, there are not in the same category, that is it. [[User:J-b|jb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4 (merged to trac): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4 (fixed): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4 (not reproducable): play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
* no longer an issue since svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4 (fixed): S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
* confirmed to work in 22822 win32 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4 (not reproducable 20070813): shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
* seems no longer an issue with svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: (partially fixed) extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4 (fixed): [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4 (fixed): menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4 (fixed): extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
48 QT4 (fixed): cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
* Partially fixed, disk is selectable but browse doesn&#039;t work 20071018 nightly [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10098</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10098"/>
		<updated>2007-10-17T22:02:30Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4 (merged to trac): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4 (fixed): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4 (not reproducable): play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
* no longer an issue since svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4 (not reproducable 20070813): shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
* seems no longer an issue with svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: (partially fixed) extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4 (fixed): [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4 (fixed): menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4 (fixed): extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
48 QT4 (fixed): cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
* Partially fixed, disk is selectable but browse doesn&#039;t work 20071018 nightly [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10087</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10087"/>
		<updated>2007-10-13T18:07:45Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4 (merged to trac): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4 (fixed): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4 (not reproducable): play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
* no longer an issue since svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4 (not reproducable 20070813): shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
* seems no longer an issue with svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: (partially fixed) extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4 (fixed): [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4 (fixed): menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4 (fixed): extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10086</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10086"/>
		<updated>2007-10-13T12:22:36Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4 (merged to trac): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4 (not reproducable 20070813): shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
* seems no longer an issue with svn 22584 or nightly 20070813 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: (partially fixed) extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4 (fixed): [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4 (fixed): menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4 (fixed): extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10085</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=10085"/>
		<updated>2007-10-13T12:11:07Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4 (merged to trac): assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4: shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9854</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9854"/>
		<updated>2007-09-11T12:07:32Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4 (fixed): play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4 (fixed): would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4 (unknown): rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
* Not reproducable in 21952, might be related to other problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4 (fixed): file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
* This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
* Yes that was my problem [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4: shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9853</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9853"/>
		<updated>2007-09-11T12:01:37Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
1 , 4? , 8, 9, 10, 12, 13, 14, 21, 23?, 25?, 28, 30, 31, 32, 34, 35, 36, 37, 38, 40, 41, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4: play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
* should be fixed on win32 [[User:Funman|funman]]&lt;br /&gt;
* threading issue on linux, so can&#039;t test now [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
* fixed, not using PLAYLIST_GO anymore, so the added directory won&#039;t start playing [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4: would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
* fixed [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
* F is done [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4: rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
* Partly done. Not optimal but this would be enough though [[User:J-b|jb]] 19:25, 8 September 2007 (CEST) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4: file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
This has been changed after my XDG Base Directory Specification commit. (It should at least default to a &amp;quot;normal&amp;quot; user directory, not app data). Not sure if that was the issue you were mentioning though. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
* linux ok [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4: shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
* i don&#039;t agree, but we could have a setting to have it always enabled (i.e. not by default) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* fixed (marq still remains anyway :/) [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* qt4 threads related [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
* done in rev 21879 [[User:J-b|jb]] 19:25, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
* done in rev 21890 [[User:J-b|jb]] 03:30, 9 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
* That code would also work if the items weren&#039;t grayed out (we&#039;d just need to use something else than a QGroupBox for the container since that automatically disables the child widgets when it&#039;s unchecked ... so basically we&#039;d need our own QGroupBox class without the &amp;quot;disable all the child widgets&amp;quot; bit, or move the enable/disable checkbox out of the GroupBox&#039;s title (which wouldn&#039;t look good)). The motivation behind greying those items out was that most filters allow updating of their parameters real time so it doesn&#039;t really matter. (And filters which don&#039;t allow updating of their parameters should be restarted automatically, not sure if that&#039;s done though, I&#039;d have to check.) If wanted/needed, we can keep all the input boxes enabled, even when the filter is disabled (or make it an option :D). [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
* Easiest solution would be to sort the language arrays (make sure that the two stay in sync!!!) in src/libvlc-module.c (that&#039;s a sort in the source code before compilation). We can&#039;t automate the sort since it&#039;d then sort all other multiple choice config options in the interface which we&#039;re not sure that we want to do. [[User:Dionoea|Dionoea]]&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9824</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9824"/>
		<updated>2007-09-08T16:49:02Z</updated>

		<summary type="html">&lt;p&gt;Trax: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
3 , 4? , 6?, 8, 9, 10, 12, 13, 14, 16, 19, 21, 23?, 25?, 26, 28, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4: play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4: would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4: rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4: file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4: shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9823</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9823"/>
		<updated>2007-09-08T16:48:45Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* svn 21737 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
3 , 4? , 6?, 8, 9, 10, 12, 13, 14, 16, 19, 21, 23?, 25?, 26, 28, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4: play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4: would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4: rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4: file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
36 QT4: shoutcast TV discovery, click on the 1st discovered item, &#039;&#039;&#039;CRASH&#039;&#039;&#039; on playlist_nodedump&lt;br /&gt;
* duplicate issue? [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
40 QT4: extended settings, add logo, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9822</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9822"/>
		<updated>2007-09-08T16:46:04Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* nightly win32-20070831 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
3 , 4? , 6?, 8, 9, 10, 12, 13, 14, 16, 19, 21, 23?, 25?, 26, 28, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3 QT4: play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
19 QT4: would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
25 QT4: rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
28 QT4: file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CRASH 36 QT4: shoutcast TV discovery, click on the 1st discovered item, crash on playlist_nodedump&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
CRASH 39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, crash&lt;br /&gt;
&lt;br /&gt;
CRASH 40 QT4: extended settings, add logo, crash&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
	<entry>
		<id>https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9821</id>
		<title>TraxPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.videolan.org/index.php?title=TraxPage&amp;diff=9821"/>
		<updated>2007-09-08T16:44:50Z</updated>

		<summary type="html">&lt;p&gt;Trax: /* svn 21817 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: I mostly focussed on QT4 so if there&#039;s an issue it doesn&#039;t necessarily mean it&lt;br /&gt;
isn&#039;t a problem in WX either..&lt;br /&gt;
&lt;br /&gt;
== Remaining issues ==&lt;br /&gt;
3 , 4? , 6?, 8, 9, 10, 12, 13, 14, 16, 19, 21, 23?, 25?, 26, 28, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45&lt;br /&gt;
&lt;br /&gt;
== nightly win32-20070831 ==&lt;br /&gt;
&lt;br /&gt;
1 WX/QT4: play file, open playlist, &#039;&#039;&#039;CRASH&#039;&#039;&#039;&lt;br /&gt;
* rumoured to be fixed in svn already [[User:Trax|Trax]]&lt;br /&gt;
* nope wrong.. [[User:Trax|Trax]]&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe -I wx &lt;br /&gt;
&lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2776.0x8a8]&lt;br /&gt;
 0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x77c478c0 in strlen () from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #1  0x691c2103 in TextPrint (p_msg=0x3e8320, p_file=0x77c5fce0)&lt;br /&gt;
     at logger.c:393&lt;br /&gt;
 #2  0x691c1f28 in FlushQueue (p_sub=0xbcaa40, p_file=0x77c5fce0, i_mode=0)&lt;br /&gt;
     at logger.c:377&lt;br /&gt;
 #3  0x691c1e49 in Run (p_intf=0xa51348) at logger.c:337&lt;br /&gt;
 #4  0x70317339 in RunInterface ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #5  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #6  0x00a51348 in ?? ()&lt;br /&gt;
 #7  0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
As for QT4, normal discovery is fine but if you first open file, then shoutcast TV&lt;br /&gt;
discovery and click on item&lt;br /&gt;
 &lt;br /&gt;
 Starting program: /home/User/daily/vlc-0.9.0-svn-21875-debug/vlc.exe&lt;br /&gt;
 &lt;br /&gt;
 Program received signal SIGSEGV, Segmentation fault.&lt;br /&gt;
 [Switching to thread 2084.0x1e8]&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 (gdb) bt&lt;br /&gt;
 #0  0x70321655 in __vlc_mutex_lock ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #1  0x7032139f in input_item_subitem_added ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #2  0x7038b075 in vlc_event_send ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #3  0x70244a01 in input_ItemAddSubItem (p_parent=0x4c23640, p_child=0x7d077e0)&lt;br /&gt;
     at ../../../include/vlc_input.h:160&lt;br /&gt;
 #4  0x702446a7 in Demux (p_demux=0x4c1cc68) at pls.c:164&lt;br /&gt;
 #5  0x70334c48 in MainLoop ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #6  0x7033474a in Run ()&lt;br /&gt;
    from /home/User/daily/vlc-0.9.0-svn-21875-debug/libvlc.dll&lt;br /&gt;
 #7  0x77c3a3b0 in msvcrt!_endthreadex ()&lt;br /&gt;
    from /cygdrive/c/WINDOWS/system32/msvcrt.dll&lt;br /&gt;
 #8  0x04bd89e8 in ?? ()&lt;br /&gt;
 #9  0x04b7b0e0 in ?? ()&lt;br /&gt;
 #10 0x003e0000 in ?? ()&lt;br /&gt;
 #11 0x04cbe700 in ?? ()&lt;br /&gt;
 #12 0x00000000 in ?? () from&lt;br /&gt;
&lt;br /&gt;
2 QT4 (fixed): mkv crash (regression, works in WX)&lt;br /&gt;
* Sample ? [[User:J-b|jb]] 12:14, 8 September 2007 (CEST)&lt;br /&gt;
* Must have been fixed meanwhile. Works perfectly [[User:J-b|jb]] 16:57, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
3 QT4: play file, deinterlace, enable, resizes video to 10x10 pixels! deinterlace disable same effect workaround: disable/enable video track&lt;br /&gt;
&lt;br /&gt;
4 QT4/WX: play button, doesn&#039;t give open dialog anymore&lt;br /&gt;
* Works fine, but we need a way to know which one of &amp;quot;media library&amp;quot;/&amp;quot;playlist&amp;quot;/&amp;quot;services discovery&amp;quot; is active, and also a way to get the number of items in one of these &amp;quot;playlists&amp;quot; [[User:Funman|funman]] 01:22, 8 September 2007 (CEST)&lt;br /&gt;
* needs --no-media-library as workaround [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
5 QT4: open file, doesn&#039;t go where you click. when there is 2 rows and you click on a 2nd row it will shift the whole view to the left. so if you doubleclick (which used to select and open) you end up selecting the wrong file&lt;br /&gt;
* Qt4.2 bug under windows.&lt;br /&gt;
&lt;br /&gt;
6 QT4/WX (fixed): no longer avi corrupt warning popup&lt;br /&gt;
* Ok in 21875 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
7 QT4 (fixed): slider doesn&#039;t go where you click anymore, regression (does work in WX)&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
8 QT4: shoutcast TV, changing channels often segfaults&lt;br /&gt;
* might be related to issue 1 [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
9 QT4: extended prefs, various modules not found (erase, marq, logo etc.)&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
* this is when changing settings [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
10 QT4: wrong win32 slash, / instead of \ in filename&lt;br /&gt;
&lt;br /&gt;
11 QT4: shows popup filename in taskbar while wx doesn&#039;t&lt;br /&gt;
* just means wx sucks [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
12 QT4: shows full filename in titlebar instead of just the filename, video only&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
13 QT4: shows full filename on vout osd instead of just the filename&lt;br /&gt;
* ok on linux [[User:Funman|funman]]&lt;br /&gt;
&lt;br /&gt;
14 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; in playlist_model.cpp: add sap or podcast, select, remove also will not remove audio or TV&lt;br /&gt;
&lt;br /&gt;
15 QT4 (fixed): open network:&lt;br /&gt;
** https will not appear in customize&lt;br /&gt;
** rtsp cannot enter address&lt;br /&gt;
** udp/rtp (unicast) can enter address but doesn&#039;t appear in customize&lt;br /&gt;
* Done and fixed [[User:J-b|jb]] 12:27, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
16 QT4: assertion &#039;&#039;&#039;CRASH&#039;&#039;&#039; on open directory: playlist/tree.c line 191&lt;br /&gt;
&lt;br /&gt;
17 QT4 (implemented): Filter &amp;quot;video files&amp;quot; doesnt include .gxf and .mxf&lt;br /&gt;
&lt;br /&gt;
18 QT4: dock playlist, doesn&#039;t seem to work properly when showing videos, too small undock and replay a clip and &#039;&#039;&#039;CRASH&#039;&#039;&#039; (because the size is small?)&lt;br /&gt;
* Won&#039;t fix until QDockWidget&lt;br /&gt;
&lt;br /&gt;
19 QT4: would be nice to have the speaker icon have a mute version with a cross in it&lt;br /&gt;
&lt;br /&gt;
20 QT4 (fixed): the numerical value for slower/faster isn&#039;t updated&lt;br /&gt;
* Done [[User:J-b|jb]] 15:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
21 QT4: play file, open playlist, doubleclick the file you are playing, &#039;&#039;&#039;CRASH&#039;&#039;&#039; as sertion failed: playlist_model.cpp line 495, expression index.isValid() or does this only happen when adding telnet interface in the mean time!?&lt;br /&gt;
&lt;br /&gt;
22 QT4 (fixed): play button is now also pause button but has no pause icon yet&lt;br /&gt;
* done [[User:J-b|jb]] 12:43, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
23 QT4: cannot play files with underscores (this is in cygwin)&lt;br /&gt;
&lt;br /&gt;
24 QT4: S button for taking snapshots doesn&#039;t work, nor does F for fullscreen&lt;br /&gt;
* F does work [[User:J-b|jb]] 15:56, 8 September 2007 (CEST)&lt;br /&gt;
* S Does worl too [[User:J-b|jb]] 16:12, 8 September 2007 (CEST)&lt;br /&gt;
* S is ok but F does not work in 21875 win32 [[User:Trax|Trax]] 18:30, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
25 QT4: rightclick in video doesn&#039;t open menu immediately, needs a &amp;quot;first&amp;quot; click this works counterintuitive, especially if you after that doubleclick for fullscreen (which needs another click then)&lt;br /&gt;
&lt;br /&gt;
26 QT4: option to unhide menus works quite well, how do I unhide easily? suggestion, rightclick on video, tools, make a hide menu toggle (but this won&#039;t work if there is no vout active)&lt;br /&gt;
&lt;br /&gt;
27 QT4 (fixed): in win32 it seems the main window isn&#039;t resized properly initially the bottom line icons (forward, stop etc.) are half their usual height,        dragging the resize slider bottom right a bit makes it &amp;quot;normal&amp;quot; again after clip is played it &amp;quot;resets&amp;quot; to the wrong height again in initial mode&lt;br /&gt;
* fixed by ssbssa [[User:Funman|funman]] 03:38, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
28 QT4: file, open, this will give a default folder&lt;br /&gt;
&lt;br /&gt;
 C:\documents and settings\user\application data&lt;br /&gt;
 note that there are no capitals while there should be (what is manipulating this?)&lt;br /&gt;
 in WX the last used folder is remembered, in QT4 not&lt;br /&gt;
&lt;br /&gt;
29 QT4: file open, when browsing there is always debug msgs:&lt;br /&gt;
&lt;br /&gt;
 intersectingStaticSet: row 10 was invalid&lt;br /&gt;
&lt;br /&gt;
* QT4.2 bug under windows&lt;br /&gt;
&lt;br /&gt;
30 QT4: when files are opened with weird characters in filename or path like&lt;br /&gt;
&lt;br /&gt;
 I:\&amp;amp;#2892;\file_1.avi&lt;br /&gt;
 it will be misidentified as having subtitles and spam: freetype warning: unbreakable string&lt;br /&gt;
 does not happen in WX&lt;br /&gt;
&lt;br /&gt;
31 QT4/WX: in cygwin gdb it&#039;s impossible to open files, gives weird filename could not open spam; drag and drop does work&lt;br /&gt;
&lt;br /&gt;
32 QT4/WX: start audio stream, open visualisation goom, disable goom, will not destroy the goom vout&lt;br /&gt;
&lt;br /&gt;
33 QT4/WX (fixed): goto time function doesn&#039;t reset timing counter. example clip is at 0:52/4:10 goto 0:10 with function and counter stays at 0:52/4:10 until the played clip exceeds 52 sec. then it continues to count&lt;br /&gt;
* Done. [[User:J-b|jb]] 12:58, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
34 QT4/WX: generic performance issue. a simple thing like opening internet explorer with blank page will interfere with VLC cause audio/video hickups when something is playing. regression&lt;br /&gt;
but --high-prio &amp;quot;fixes&amp;quot; it&lt;br /&gt;
* make high-prio default ? [[User:Funman|funman]] 01:47, 8 September 2007 (CEST)&lt;br /&gt;
* maybe workaround but there&#039;s something seriously wrong with performance that needs fixing. shouldn&#039;t have to use this option [[User:Trax|Trax]]&lt;br /&gt;
&lt;br /&gt;
35 QT4/WX: play clip, turn on wallpaper, turn on deinterlace, wallpaper disappears from menu&lt;br /&gt;
&lt;br /&gt;
== svn 21737 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CRASH 36 QT4: shoutcast TV discovery, click on the 1st discovered item, crash on playlist_nodedump&lt;br /&gt;
&lt;br /&gt;
37 QT4: show more options in open dialogue. it&#039;s perhaps usable to always have this enabled?&lt;br /&gt;
        makes it easier to copy/paste links in VLC and you can see what some options do if&lt;br /&gt;
        you toggle them (timeshift etc.)&lt;br /&gt;
&lt;br /&gt;
38 QT4/WX: opening a shoutcast playlist will not autostart the 1st item&lt;br /&gt;
&lt;br /&gt;
CRASH 39 QT4: extended settings, add text, enable, disable (VLC marq still remains!), enable, crash&lt;br /&gt;
&lt;br /&gt;
CRASH 40 QT4: extended settings, add logo, crash&lt;br /&gt;
&lt;br /&gt;
41 QT4: file, open file. blank icons for files (no icons for registered filetypes)&lt;br /&gt;
&lt;br /&gt;
42 QT4: [00000642] main interface error: option errors-dialog does not exist     &lt;br /&gt;
* done in rev 21869. [[User:J-b|jb]] 16:54, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
43 QT4: menu inconsistencies. main menu has interfaces as part of tools while right click menu in vout has interfaces as seperate option&lt;br /&gt;
&lt;br /&gt;
44 QT4: extended prefs doesn&#039;t have Close, OK or Cancel button. feels unnatural to close the prefs with the X top right. Use same Save, Cancel, Reset ext. prefs like the normal prefs menu has?&lt;br /&gt;
&lt;br /&gt;
45 QT4: equalizer status isn&#039;t updated everywhere (already in trac?) when changing from main menu the status in extended prefs isn&#039;t updated accordingly and vice versa.the function is ok it&#039;s only the selection that isn&#039;t updated. why bother with 2 locations? doesn&#039;t extended prefs suffice or is main menu intended as &amp;quot;quick&amp;quot; setting?&lt;br /&gt;
&lt;br /&gt;
== svn 21817 ==&lt;br /&gt;
&lt;br /&gt;
46 QT4: cosmetics. extended prefs.. using wall or clone filter it&#039;s not possible to set the amount of clone or wall rows before hand because it&#039;s greyed out so you always have to use the defaults first, enable the option then set the appropriate amount.&lt;br /&gt;
* Yes. This is a normal behaviour, way easier to code. [[User:J-b|jb]] 13:48, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
47 QT4: start vlc, open playlist, dock playlist: &lt;br /&gt;
        33201 1 QPaintDevice: Cannot destroy paint device that is being painted.&lt;br /&gt;
        Be sure to QPainter::end() painters!&lt;br /&gt;
&lt;br /&gt;
(fixed) 48 QT4: cosmetics. media information stats. imho the order looks nicer to have Video, Audio, Input, Streaming and also have the main window be just as big as all the expanded settings (same for Codec information)&lt;br /&gt;
* Done [[User:J-b|jb]] 13:08, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
49 QT4: open disc, disk device is not selectable (nothing to select, stays empty) and browse button is not functional yet. does work when I just manually type in my DVD drive as D:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50 QT4: cosmetics. language selection in interfaces is not sorted alphabetically&lt;br /&gt;
* No idea how to do that [[User:J-b|jb]] 14:29, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
51 QT4: cosmetics. Tools, Codec information and Media information, to have both seems a bit redundant (they both open the Codec information tab). Why not drop Codec information from the menu but keep the CTRL+I as Media information as I stands for information :)&lt;br /&gt;
* Because this is the most asked question in support: &amp;quot;What is the codec&amp;quot; [[User:J-b|jb]] 13:02, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
52 QT4: cosmetics: Tools, Codec information, Codec Details, why bother showing empty fields (i.e. Language is often not used)&lt;br /&gt;
* Because noones wants the same things. Won&#039;t fix [[User:J-b|jb]] 13:01, 8 September 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
53 QT4: cosmetics. overall view of QT4 is quite huge compared to WX and even other players (this sample doesn&#039;t even have the extra buttons)&lt;br /&gt;
        http://www.firstmiletv.nl/vlc/problems/qt4/windowsize.jpg&lt;br /&gt;
        the play/stop etc. buttons in tray icon menu are already a lot smaller, are they usable?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
54 QT4: cosmetics. the title section of the clip on the bottom does not have a 3d &amp;quot;feel&amp;quot; as if  it&#039;s embedded, the same way the speed and time/duration section is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
55 QT4: cosmetics. personally I&#039;d like the title section on the right and the time/speed on the left as it is with WX. this because those sections are rather fixed and &amp;quot;look&amp;quot; better at the left starting side.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
56 QT4: cosmetics. as the slider bar is already quite large, why not have the time/duration section on the left or right side on the same height. this leaves more room for (often) long title info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
57 QT4: cosmetics and nice to have. magnetic menus  for debug, ext. prefs etc. they open all over the place :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
58 QT4: always shows time slider, even for livestreams (i.e. shoutcast)&lt;/div&gt;</summary>
		<author><name>Trax</name></author>
	</entry>
</feed>