mostly written by Luca. Originally committed as revision 26389 to svn://svn.ffmpeg.org/ffmpeg/trunkoldabi
parent
f62be777ee
commit
df17f6d507
1 changed files with 227 additions and 0 deletions
@ -0,0 +1,227 @@ |
||||
|
||||
About Git write access: |
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||||
|
||||
Before everything else, you should know how to use GIT properly. |
||||
Luckily Git comes with excellent documentation. |
||||
|
||||
git --help |
||||
man git |
||||
|
||||
shows you the available subcommands, |
||||
|
||||
git <command> --help |
||||
man git-<command> |
||||
|
||||
shows information about the subcommand <command>. |
||||
|
||||
The most comprehensive manual is the website Git Reference |
||||
|
||||
http://gitref.org/ |
||||
|
||||
For more information about the Git project, visit |
||||
|
||||
http://git-scm.com/ |
||||
|
||||
Consult these resources whenever you have problems, they are quite exhaustive. |
||||
|
||||
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 |
||||
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. |
||||
|
||||
|
||||
|
||||
I. BASICS: |
||||
========== |
||||
|
||||
0. Get GIT: |
||||
|
||||
You can get git from http://git-scm.com/ |
||||
|
||||
|
||||
1. Cloning the source tree: |
||||
|
||||
git clone git://git.videolan.org/ffmpeg <target> |
||||
|
||||
This will put the FFmpeg sources into the directory <target>. |
||||
|
||||
git clone git@git.videolan.org:ffmpeg <target> |
||||
|
||||
This will put the FFmpeg 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 |
||||
|
||||
pulls in the latest changes from the repository to your local master 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. |
||||
|
||||
|
||||
3. Adding/removing files/directories: |
||||
|
||||
git add [-A] <filename/dirname> |
||||
git rm [-r] <filename/dirname> |
||||
|
||||
GIT needs to get notified of all changes you make to your working |
||||
directory that makes files appear or disappear. |
||||
Line moves across files are automatically tracked. |
||||
|
||||
|
||||
4. Showing modifications: |
||||
|
||||
git diff <filename(s)> |
||||
|
||||
will show all local modifications in your working directory as unified diff. |
||||
|
||||
|
||||
5. Inspecting the changelog: |
||||
|
||||
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 |
||||
|
||||
6. Checking source tree status: |
||||
|
||||
git status |
||||
|
||||
detects all the changes you made and lists what actions will be taken in case |
||||
of a commit (additions, modifications, deletions, etc.). |
||||
|
||||
|
||||
7. Committing: |
||||
|
||||
git diff --check |
||||
|
||||
to doublecheck 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. |
||||
It's very easy for stray debug output or cosmetic modifications to slip in, |
||||
please avoid problems through this extra level of scrutiny. |
||||
|
||||
For cosmetics-only commits you should get (almost) empty output from |
||||
|
||||
git diff -wb <filename(s)> |
||||
|
||||
Also check the output of |
||||
|
||||
git status |
||||
|
||||
to make sure you don't have untracked files or deletions. |
||||
|
||||
git add [-i|-p|-A] <filenames/dirnames> |
||||
|
||||
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 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 |
||||
|
||||
git config core.editor |
||||
|
||||
or set by one of the following environment variables: |
||||
GIT_EDITOR, VISUAL or EDITOR. |
||||
|
||||
Log messages should be concise but descriptive. Explain why you made a change, |
||||
what you did will be obvious from the changes themselves most of the time. |
||||
Saying just "bug fix" or "10l" is bad. Remember that people of varying skill |
||||
levels look at and educate themselves while reading through your code. Don't |
||||
include filenames in log messages, Git provides that information. |
||||
|
||||
Possibly make the commit message have a terse, descriptive first line, an |
||||
empty line and then a full description. The first line will be used to name |
||||
the patch by git format-patch. |
||||
|
||||
|
||||
8. Renaming/moving/copying files or contents of files: |
||||
|
||||
Git automatically tracks such changes, making those normal commits. |
||||
|
||||
mv/cp path/file otherpath/otherfile |
||||
|
||||
git add [-A] . |
||||
|
||||
git commit |
||||
|
||||
Do not move, rename or copy files of which you are not the maintainer without |
||||
discussing it on the mailing list first! |
||||
|
||||
9. Reverting broken commits |
||||
|
||||
git revert <commit> |
||||
|
||||
git revert will generate a revert commit. This will not make the faulty |
||||
commit disappear from the history. |
||||
|
||||
git reset <commit> |
||||
|
||||
git reset will uncommit the changes till <commit> rewriting the current |
||||
branch history. |
||||
|
||||
git commit --amend |
||||
|
||||
allows to amend the last commit details quickly. |
||||
|
||||
git rebase -i origin/master |
||||
|
||||
will replay local commits over the main repository allowing to edit, |
||||
merge or remove some of them in the process. |
||||
|
||||
Note that the reset, commit --amend and rebase rewrite history, so you |
||||
should use them ONLY on your local or topic branches. |
||||
|
||||
The main repository will reject those changes. |
||||
|
||||
10. Preparing a patchset. |
||||
|
||||
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. |
||||
|
||||
11. Sending patches for review |
||||
|
||||
git send-email <commit list|directory> |
||||
|
||||
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. |
||||
|
||||
12. Pushing changes to remote trees |
||||
|
||||
git push |
||||
|
||||
Will push the changes to the default remote (origin). |
||||
Git will prevent you from pushing changes if the local and remote trees are |
||||
out of sync. Refer to 2 and 2.a to sync the local tree. |
||||
|
||||
git remote add <name> <url> |
||||
|
||||
Will add additional remote with a name reference, it is useful if you want |
||||
to push your local branch for review on a remote host. |
||||
|
||||
git push <remote> <refspec> |
||||
|
||||
Will push the changes to the remote repository. Omitting refspec makes git |
||||
push update all the remote branches matching the local ones. |
||||
|
||||
Contact the project admins <root at ffmpeg dot org> if you have technical |
||||
problems with the GIT server. |
Loading…
Reference in new issue