diff options
| -rw-r--r-- | web/input/doc/faq/git.md | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/web/input/doc/faq/git.md b/web/input/doc/faq/git.md index 53260ec..5503166 100644 --- a/web/input/doc/faq/git.md +++ b/web/input/doc/faq/git.md | |||
| @@ -17,10 +17,10 @@ means distributed development can occur around that central repository. | |||
| 17 | Git has an additional stage between the working directory and the repository. | 17 | Git has an additional stage between the working directory and the repository. |
| 18 | The idea is that you might be working on multiple unrelated things without | 18 | The idea is that you might be working on multiple unrelated things without |
| 19 | wanting to commit all changes in one go. Therefore, the changes that should | 19 | wanting to commit all changes in one go. Therefore, the changes that should |
| 20 | be committed must first be added to the repository *index*, which can be seen | 20 | be committed must first be added to the so-called *index*, which can be seen |
| 21 | as a staging area. This is usually done with **git add**, both for new files | 21 | as a staging area of the repository. This is usually done with **git add**, |
| 22 | *and* for changes to existing ones. When you commit using **git commit**, | 22 | both for new files *and* for changes to existing ones. When you commit using |
| 23 | only the changes in the index are considered. | 23 | **git commit**, only the changes in the index are considered. |
| 24 | 24 | ||
| 25 | After committing, the changes are still local. To share them with others, you | 25 | After committing, the changes are still local. To share them with others, you |
| 26 | have to push them to a remote repository, or have someone pull from your | 26 | have to push them to a remote repository, or have someone pull from your |
| @@ -39,9 +39,9 @@ with Git you only have to type a handful of digits to reference one. | |||
| 39 | ## Cloning a Project | 39 | ## Cloning a Project |
| 40 | 40 | ||
| 41 | To work on a project you first have to clone it. This creates your own local | 41 | To work on a project you first have to clone it. This creates your own local |
| 42 | repository and until you want to distribute your change or merge changes from | 42 | repository, and until you want to distribute your change or merge changes from |
| 43 | someone else everything that follows can happen offline. If you have push | 43 | someone else, everything that follows can happen offline. If you have push |
| 44 | access, run the command: | 44 | access to the Nagios Plugins repository, run the command: |
| 45 | 45 | ||
| 46 | git clone git@github.com:nagios-plugins/nagios-plugins.git | 46 | git clone git@github.com:nagios-plugins/nagios-plugins.git |
| 47 | 47 | ||
| @@ -50,9 +50,9 @@ run this command instead: | |||
| 50 | 50 | ||
| 51 | git clone git://github.com/nagios-plugins/nagios-plugins.git | 51 | git clone git://github.com/nagios-plugins/nagios-plugins.git |
| 52 | 52 | ||
| 53 | This will create a directory called `nagios-plugins` in your current directory | 53 | This will create a directory called `nagios-plugins` with all the `master` |
| 54 | with all the `master` code and history (this is roughly equivalent to CVS/SVN | 54 | code and history (this is roughly equivalent to CVS/SVN `HEAD`). Change |
| 55 | `HEAD`). Change directory to `nagios-plugins`. | 55 | directory to `nagios-plugins`. |
| 56 | 56 | ||
| 57 | ## Editing Files | 57 | ## Editing Files |
| 58 | 58 | ||
| @@ -61,7 +61,7 @@ You can edit the files in the working area. To check the status, use: | |||
| 61 | git status | 61 | git status |
| 62 | 62 | ||
| 63 | This will show a list of changes in the working directory. Newly made changes | 63 | This will show a list of changes in the working directory. Newly made changes |
| 64 | appear in *red*, while changes added to the index are shown in green. You can | 64 | appear in red, while changes added to the index are shown in green. You can |
| 65 | use **git diff** to see changes between the current working directory and the | 65 | use **git diff** to see changes between the current working directory and the |
| 66 | index (untracked files will not be shown). | 66 | index (untracked files will not be shown). |
| 67 | 67 | ||
| @@ -70,25 +70,25 @@ index (untracked files will not be shown). | |||
| 70 | Use **git add** to specify which new files/changes you want to commit; this | 70 | Use **git add** to specify which new files/changes you want to commit; this |
| 71 | will add the changes to the index. You can select only partial diffs with | 71 | will add the changes to the index. You can select only partial diffs with |
| 72 | **git add -p** too. If you want to commit everything you can use **git commit | 72 | **git add -p** too. If you want to commit everything you can use **git commit |
| 73 | -a** directly. You can see the changes you are about to commit (difference | 73 | -a** directly. You can see the changes you are about to commit (the |
| 74 | between HEAD and the index) with **git diff --cached**, and then commit them | 74 | difference between HEAD and the index) with **git diff --staged**, and then |
| 75 | with: | 75 | commit them with: |
| 76 | 76 | ||
| 77 | git commit | 77 | git commit |
| 78 | 78 | ||
| 79 | Add a comment (you have read the [Development Guidelines][guidelines], right? | 79 | Add a comment (you *have* read the [Development Guidelines][guidelines], |
| 80 | :-)). This commit will be local (affecting only your own repository) so you | 80 | right? :-)). This commit will be local (affecting only your own repository), |
| 81 | will have to either push your changes, or have someone to pull them from you | 81 | so you will have to either push your changes, or have someone pull them from |
| 82 | (in the latter case you will most likely still push to a publicly accessible | 82 | you (in the latter case you will most likely still push to a publicly |
| 83 | clone of your local repository). If the change is from a contributor, set the | 83 | accessible clone of your local repository). If the change is from a |
| 84 | author at commit time: | 84 | contributor, set the author at commit time: |
| 85 | 85 | ||
| 86 | git commit --author="Jane Doe <jane@example.com>" | 86 | git commit --author="Jane Doe <jane@example.com>" |
| 87 | 87 | ||
| 88 | If you realize that you forgot something in your commit and haven’t pushed it | 88 | If you realize that you forgot something in your commit and haven’t pushed it |
| 89 | yet to a remote repository, you can amend your last commit with **git commit | 89 | yet to a remote repository, you can amend your last commit with **git commit |
| 90 | --amend**. You can also amend after a push and force the next update, however | 90 | --amend**. You can also amend after a push and force the next update, however |
| 91 | this will cause non-linear updates and should be done only if the developers | 91 | this will cause non-linear updates and should be done only if all developers |
| 92 | using your repository are aware of it. | 92 | using your repository are aware of it. |
| 93 | 93 | ||
| 94 | ## Reverting Local Modifications | 94 | ## Reverting Local Modifications |
| @@ -119,46 +119,46 @@ command you may be able to recover them with **git reflog** and **git checkout | |||
| 119 | git reset --hard <file> | 119 | git reset --hard <file> |
| 120 | 120 | ||
| 121 | Do not reset changes that have already been pushed to remote repositories as | 121 | Do not reset changes that have already been pushed to remote repositories as |
| 122 | this will cause non-linear updates. If you do so, developers using those | 122 | this will cause non-linear updates. If you do so, all developers using those |
| 123 | repositories should be aware of it. | 123 | repositories should be aware of it. |
| 124 | 124 | ||
| 125 | ## Merging Remote Changes | 125 | ## Merging Remote Changes |
| 126 | 126 | ||
| 127 | When you work on your local repository you’ll need to keep it up to date with | 127 | When you work on your local repository you’ll need to keep it up to date with |
| 128 | the development tree. This is very similar to **svn update** with the | 128 | the development tree. This is very similar to **svn update**, with the |
| 129 | difference that it can’t be done if the working tree has any unmerged changes. | 129 | difference that it can’t be done if the working tree has any unmerged changes. |
| 130 | If you do, either commit them or put them aside (Tip: **git stash**). If you | 130 | If you do, either commit them or put them aside (hint: **git stash**). If you |
| 131 | cloned from the main Git repository, this command will do a fetch then merge | 131 | cloned from the main Git repository, this command will do a fetch and then |
| 132 | any new changes: | 132 | merge any new changes: |
| 133 | 133 | ||
| 134 | git pull | 134 | git pull |
| 135 | 135 | ||
| 136 | You can also merge changes from any other fork of the repository. This | 136 | You can also merge changes from any other fork of the repository. This |
| 137 | usually happens if someone ask you to pull from his own repo for some fix or | 137 | usually happens if someone asks you to pull from his own repo for some fix or |
| 138 | enhancements. Together with **--no-commit** you will have a chance to review | 138 | enhancements. Together with **--no-commit**, you will have a chance to review |
| 139 | the changes and make any relevant correction before the merge. Example: | 139 | the changes and make any relevant correction before the merge. Example: |
| 140 | 140 | ||
| 141 | git pull --no-commit git://example.com/path/to/repo.git master | 141 | git pull --no-commit git://example.com/path/to/repo.git master |
| 142 | 142 | ||
| 143 | ## Merging Back to the Main Repository | 143 | ## Merging Back to the Main Repository |
| 144 | 144 | ||
| 145 | Once you’re done with your commits and after pulling from the main repository, | 145 | Once you’re done with your commits, and after pulling from the main |
| 146 | you can push you change back to it. If you cloned using the *push* url this | 146 | repository, you can push your changes back to it. If you cloned using the |
| 147 | command will push the master branch: | 147 | *push* URL, this command will push the master branch: |
| 148 | 148 | ||
| 149 | git push | 149 | git push |
| 150 | 150 | ||
| 151 | It you’re trying to push something that would generate merge conflicts, the | 151 | It you’re trying to push something that would generate merge conflicts, the |
| 152 | push will be rejected. You will have yo do a pull first, fix the any | 152 | push will be rejected. You will have to do a pull first, fix any conflicts |
| 153 | conflicts locally and then push again. If your commits are local (you haven’t | 153 | locally, and then push again. If your commits are local (you haven’t pulled |
| 154 | pulled them from someone else or published them somewhere) you can rebase to | 154 | them from someone else or published them somewhere) you can rebase to avoid a |
| 155 | avoid a merge: | 155 | merge: |
| 156 | 156 | ||
| 157 | git pull --rebase | 157 | git pull --rebase |
| 158 | 158 | ||
| 159 | Like a merge, this may generate conflicts and let you fix them, but instead of | 159 | Like a merge, this may generate conflicts and let you fix them, but instead of |
| 160 | creating a merge commit on top of the others, it will undo your commits, | 160 | creating a merge commit on top of the others, it will undo your commits, |
| 161 | fast-forward and apply your commits again. This is cleaner but doesn’t play | 161 | fast-forward and apply your commits again. This is cleaner, but doesn’t play |
| 162 | well when it rewrites already published history. | 162 | well when it rewrites already published history. |
| 163 | 163 | ||
| 164 | ## Going Further | 164 | ## Going Further |
| @@ -168,7 +168,8 @@ commands for manipulating changes and working with others. They are all very | |||
| 168 | well documented (see **git help [-a]** for a list of commands, **git help | 168 | well documented (see **git help [-a]** for a list of commands, **git help |
| 169 | <cmd\>** or **git <cmd\> --help** shows the man page). You might also want to | 169 | <cmd\>** or **git <cmd\> --help** shows the man page). You might also want to |
| 170 | look into some of the references listed below, or into a book such as [Scott | 170 | look into some of the references listed below, or into a book such as [Scott |
| 171 | Chacon][scott]'s [Pro Git][book]. | 171 | Chacon][scott]'s [Pro Git][book-home] (which is [freely available][book-free] |
| 172 | on the [Git web site][git]). | ||
| 172 | 173 | ||
| 173 | ## References | 174 | ## References |
| 174 | 175 | ||
| @@ -195,6 +196,7 @@ Chacon][scott]'s [Pro Git][book]. | |||
| 195 | [guidelines]: doc/guidelines.html "Nagios Plugin Development Guidelines" | 196 | [guidelines]: doc/guidelines.html "Nagios Plugin Development Guidelines" |
| 196 | [git]: http://git-scm.com/ "Git" | 197 | [git]: http://git-scm.com/ "Git" |
| 197 | [scott]: http://scottchacon.com/ "Scott Chacon" | 198 | [scott]: http://scottchacon.com/ "Scott Chacon" |
| 198 | [book]: http://git-scm.com/book "Pro Git" | 199 | [book-home]: http://www.apress.com/9781430218333 "Pro Git at Apress" |
| 200 | [book-free]: http://git-scm.com/book "Pro Git for Free" | ||
| 199 | 201 | ||
| 200 | <!--% # vim:set filetype=markdown textwidth=78 joinspaces: # %--> | 202 | <!--% # vim:set filetype=markdown textwidth=78 joinspaces: # %--> |
