brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 1 | Some us are using git for managing quickly changing code. This file has |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 2 | notes for setting that up. |
| 3 | |
| 4 | ssh to robotics.mvla.net and add the git executables to your .bashrc: |
| 5 | PATH=$PATH:/www/https/files/frc971/2013/brian/ |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 6 | |
| 7 | [Cloning] |
| 8 | `git clone \ |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 9 | ssh://USERNAME@robotics.mvla.net/www/https/git/frc971/SOMEBODY/2013.git` |
| 10 | where USERNAME is your login on the server and SOMEBODY is whoever's git |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 11 | repo you want to clone |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 12 | If you don't have a login on the server, then cloning |
Brian Silverman | c2a5ae3 | 2013-02-21 20:35:32 -0800 | [diff] [blame] | 13 | https://robotics.mvla.net/git/frc971/somebody/2013.git instead should work |
| 14 | (with your SVN username and password). However, that form of URL is read- |
Brian Silverman | 529508d | 2013-02-21 20:49:52 -0800 | [diff] [blame] | 15 | only. In order for this to work, you have to either set the environment |
| 16 | variable GIT_SSL_NO_VERIFY to 1 or set the git option http.sslverify to false. |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 17 | If you get an error like the one below, install a newer version of git. |
| 18 | Unable to find 8fcd87533b76ca5b4b83fb6031ddf0de5e03eb57 under https://robotics.mvla.net/git/frc971/brian/2013.git |
| 19 | Cannot obtain needed object 8fcd87533b76ca5b4b83fb6031ddf0de5e03eb57 |
| 20 | error: Fetch failed. |
| 21 | I get this error sometimes with version 1.7.2.5 but not with version 1.7.10.4. |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 22 | |
| 23 | [Adding Other People's Repositories] |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 24 | `git remote add SOMEBODY \ |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 25 | ssh://USERNAME@robotics.mvla.net/www/https/git/frc971/SOMEBODY/2013.git` |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 26 | where USERNAME is your login on the server and SOMEBODY is another person's |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 27 | git repository |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 28 | The https:// URL discussed above in [Cloning] will work too. |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 29 | |
brians | ae54f07 | 2013-02-18 05:24:06 +0000 | [diff] [blame] | 30 | [Working with Other People's Repositories] |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 31 | `git fetch SOMEBODY` will pull their changes, and then you can rebase on top of |
brians | ae54f07 | 2013-02-18 05:24:06 +0000 | [diff] [blame] | 32 | them etc. |
| 33 | `git push --mirror` will push all of your local branches so that everybody else |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 34 | can see them. (This is the default if the configuration option remote.<remote>.mirror is set.) |
Brian Silverman | c2a5ae3 | 2013-02-21 20:35:32 -0800 | [diff] [blame] | 35 | However, you can not do that with an https:// URL. |
brians | 66d5730 | 2013-02-18 05:10:42 +0000 | [diff] [blame] | 36 | |
brians | aede41c | 2013-02-18 04:41:19 +0000 | [diff] [blame] | 37 | [Synchronizing with SVN] |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 38 | In order to synchronize the git commits with svn, somebody has to set up git-svn in their local git repo and then push/pull commits. |
| 39 | |
| 40 | To do that, `git svn init https://robotics.mvla.net/svn/frc971/2013/trunk/src` |
| 41 | |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 42 | Then, unless you want git-svn to pull down everything from SVN again, you have to edit .git/refs/remotes/git-svn (or whatever you name the remote) in your local repository and put in the commit ID of the latest commit in the repository that's from SVN. |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 43 | |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 44 | After doing that (and a `git svn fetch`), git-svn works like usual (see git-svn(1) for details). |
jerrym | cea3b8d | 2013-03-11 07:57:37 +0000 | [diff] [blame] | 45 | |
| 46 | To pull changes from svn, do `git-svn fetch`. To push changes to svn, do `git svn dcommit`, which will take all of your git commits between the latest commit from svn and your HEAD and make them into svn commits. |
| 47 | |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 48 | Multiple people dealing with svn works OK because the git commit SHAs end up the same so they all just become the same objects. |
| 49 | |
| 50 | [Server Setup] |
| 51 | To get started working with git on the server, first you have to set up your |
| 52 | .bashrc so that the git tools work. To do that, add the following line to your |
| 53 | .bashrc *ABOVE* the '[ -z "$PS1" ] && return' line. |
| 54 | PATH=$PATH:/www/https/files/frc971/2013/brian/ |
| 55 | You also need a place to store your files. You will need an adminstrator to |
| 56 | create a folder for you in /www/https/git/frc971 (on the server) with the |
| 57 | correct permissions and group. |
Brian Silverman | c2a5ae3 | 2013-02-21 20:35:32 -0800 | [diff] [blame] | 58 | |
| 59 | [Repository Setup] |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 60 | To create a git repository on the server, |
| 61 | "/www/https/git/frc971/brian/bare-git-repo" to wherever you want your |
| 62 | repository (using `git init` won't work correctly). The standard location for |
| 63 | mirrors of the "https://robotics.mvla.net/svn/frc971/YEAR/trunk/src" folder is |
| 64 | "/www/https/git/frc971/USERNAME/YEAR.git". |
Brian Silverman | c2a5ae3 | 2013-02-21 20:35:32 -0800 | [diff] [blame] | 65 | In order for https:// access to work, you have to make sure to rename |
| 66 | .git/hooks/post-update.sample to .git/hooks/post-update (and then run |
| 67 | `git update-server-info` if you're not going to push immediately). |
Brian Silverman | 319ba34 | 2013-04-14 22:03:36 -0700 | [diff] [blame^] | 68 | |
| 69 | To learn more about git, see git(1) (`man git` or |
| 70 | <http://manpages.debian.net/cgi-bin/man.cgi?query=git>) (especially the NOTES |
| 71 | section). |