You do not need a special username or password.
All you need is to provide a ssh public key to the Git server admin.
-What follows now is a basic introduction to Git and some FFmpeg-specific
+What follows now is a basic introduction to Git and some Libav-specific
guidelines. Read it at least once, if you are granted commit privileges to the
-FFmpeg project you are expected to be familiar with these rules.
+Libav project you are expected to be familiar with these rules.
1. Cloning the source tree:
- git clone git://git.videolan.org/ffmpeg <target>
+ git clone git://git.libav.org/libav.git <target>
- This will put the FFmpeg sources into the directory <target>.
+ This will put the Libav sources into the directory <target>.
- git clone git@git.videolan.org:ffmpeg <target>
+ git clone git@git.libav.org:libav.git <target>
- This will put the FFmpeg sources into the directory <target> and let
+ This will put the Libav sources into the directory <target> and let
you push back your changes to the remote repository.
2. Updating the source tree to the latest revision:
- git pull
+ git pull (--ff-only)
- pulls in the latest changes from the repository to your local master branch.
+ pulls in the latest changes from the tracked branch. The tracked branch
+ can be remote. By default the master branch tracks the branch master in
+ the remote origin.
+ Caveat: Since merge commits are forbidden at least for the initial
+ months of git --ff-only or --rebase (see below) are recommended.
+ --ff-only will fail and not create merge commits if your branch
+ has diverged (has a different history) from the tracked branch.
2.a Rebasing your local branches:
git pull --rebase
fetches the changes from the main repository and replays your local commits
- over it. This is useful to keep all your local changes at the top of your
- tree.
+ over it. This is required to keep all your local changes at the top of
+ Libav's master tree. The master tree will reject pushes with merge commits.
3. Adding/removing files/directories:
git log <filename(s)>
You may also use the graphical tools like gitview or gitk or the web
- interface available at http://git.videolan.org
+ interface available at http://git.libav.org/
6. Checking source tree status:
git diff --check
- to doublecheck your changes before committing them to avoid trouble later
+ to double check your changes before committing them to avoid trouble later
on. All experienced developers do this on each and every commit, no matter
how small.
Every one of them has been saved from looking like a fool by this many times.
For cosmetics-only commits you should get (almost) empty output from
- git diff -wb <filename(s)>
+ git diff -w -b <filename(s)>
Also check the output of
git add [-i|-p|-A] <filenames/dirnames>
+ Make sure you have told git your name and email address, e.g. by running
+ git config --global user.name "My Name"
+ git config --global user.email my@email.invalid
+ (--global to set the global configuration for all your git checkouts).
+
Git will select the changes to the files for commit. Optionally you can use
the interactive or the patch mode to select hunk by hunk what should be
added to the commit.
Git will commit the selected changes to your current local branch.
You will be prompted for a log message in an editor, which is either
- set in your personal configuration file throught
+ set in your personal configuration file through
git config core.editor
git format-patch <commit> [-o directory]
- will generate a set of patches out of the current branch starting from
- commit. By default the patches are created in the current directory.
+ will generate a set of patches for each commit between <commit> and
+ current HEAD. E.g.
+
+ git format-patch origin/master
+
+ will generate patches for all commits on current branch which are not
+ present in upstream.
+ A useful shortcut is also
+
+ git format-patch -n
+
+ which will generate patches from last n commits.
+ By default the patches are created in the current directory.
11. Sending patches for review
will send the patches created by git format-patch or directly generates
them. All the email fields can be configured in the global/local
configuration or overridden by command line.
+ Note that this tool must often be installed separately (e.g. git-email
+ package on Debian-based distros).
12. Pushing changes to remote trees
Will push the changes to the remote repository. Omitting refspec makes git
push update all the remote branches matching the local ones.
-13. Finding a specific svn revission
+13. Finding a specific svn revision
Since version 1.7.1 git supports ':/foo' syntax for specifying commits
based on a regular expression. see man gitrevisions
will show the svn changeset r23456. With older git versions searching in
the git log output is the easiest option (especially if a pager with
search capabilities is used).
+ This commit can be checked out with
+
+ git checkout -b svn_23456 :/'as revision 23456'
+
+ or for git < 1.7.1 with
+
+ git checkout -b svn_23456 $SHA1
+
+ where $SHA1 is the commit SHA1 from the 'git log' output.
+
-Contact the project admins <root at ffmpeg dot org> if you have technical
+Contact the project admins <git at libav dot org> if you have technical
problems with the GIT server.