This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
tutorials:scmgit-intro [2012/04/30 19:11] memnon minor formatting |
tutorials:scmgit-intro [2012/05/05 20:31] (current) memnon Added missing public access section, $ID |
||
---|---|---|---|
Line 128: | Line 128: | ||
Git also provides the command "git pull" to do a fetch followed by a merge. This is unlike CVS and Subversion, where "update" works like "pull". The two commands are provided because your local repo is not meant to be a copy of the remote, so you need to be able to fetch the remote without merging it into your local repository. | Git also provides the command "git pull" to do a fetch followed by a merge. This is unlike CVS and Subversion, where "update" works like "pull". The two commands are provided because your local repo is not meant to be a copy of the remote, so you need to be able to fetch the remote without merging it into your local repository. | ||
+ | |||
+ | |||
+ | ===== Creating a public access, read only repo ===== | ||
+ | Once you have your repo setup for you to do your work in, you may have a need to make your work public. Making it public allows for other users to pull specific version of your project without having to have development rights. A slight modification to your repo is needed and some webspace to host it. | ||
+ | |||
+ | === Setup some webspace === | ||
+ | To host a readonly public access version of your repo you will need to setup some space in your html directory. For our example our public repo will be accessable at http://user.sdf.org/devel/proj.git | ||
+ | |||
+ | mkdir ~/html/devel | ||
+ | hooks/post-update | ||
+ | |||
+ | In your repo directory for the project there is a directory that contains a set of scripts which are called at different times during your interaction with git. For more information about the "hooks" directory check out githook. | ||
+ | |||
+ | The script we will need to modify is post-update. This script is called after an update has occured on the server side of your repo. | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | # | ||
+ | # File: ~/git/proj.git/hooks/post-update | ||
+ | # | ||
+ | # Description: Called when an update is pushed to the server | ||
+ | # | ||
+ | |||
+ | # Location of your repo on the server | ||
+ | GIT_DIR=/arpa/tz/u/user/git/proj.git | ||
+ | |||
+ | # Location of your public version of the repo | ||
+ | HTTP_DIR=/arpa/tz/u/user/html/devel/proj.git | ||
+ | |||
+ | # Update local repo info | ||
+ | git update-server-info | ||
+ | |||
+ | # Make sure a clean copy is moved | ||
+ | rm -rf $HTTP_DIR | ||
+ | cp -rf $GIT_DIR $HTTP_DIR | ||
+ | chgrp -R nobody $HTTP_DIR | ||
+ | |||
+ | # Directories must have Read and Execute Permissions | ||
+ | # for apache to be able to navigate them. | ||
+ | for d in `find $HTTP_DIR -type d`; do | ||
+ | chmod a+rx $d | ||
+ | done | ||
+ | |||
+ | # Files must have Read Permissions for apache | ||
+ | # to be able to read them. | ||
+ | for f in `find $HTTP_DIR -type f`; do | ||
+ | chmod a+r $f | ||
+ | done | ||
+ | |||
+ | # Display a message on the client side to show | ||
+ | # the action has been performed. | ||
+ | echo "Updated Public Access" | ||
+ | </code> | ||
+ | |||
+ | Now that you have setup this script make sure its executable. | ||
+ | | ||
+ | chmod a+x ~/git/proj.git/hooks/post-update | ||
+ | |||
+ | You can now run the script directly or wait until you have committed and pushed an update to your server. | ||
+ | |||
+ | === Verifying script is run. === | ||
+ | |||
+ | When you push an update to your private development repo, a new output has been added by our script. | ||
+ | |||
+ | $ git push | ||
+ | Counting objects: 5, done. | ||
+ | Compressing objects: 100% (2/2), done. | ||
+ | Writing objects: 100% (3/3), 256 bytes, done. | ||
+ | Total 3 (delta 1), reused 0 (delta 0) | ||
+ | remote: Updated Public Access | ||
+ | To user@sdf.org:git/proj.git | ||
+ | e60a9de..1f8a43f master -> master | ||
+ | $ | ||
+ | |||
+ | In the above example there is a new line labled "remote" which means that during the push, the server produced output. The line matches the last line in our post-update script. Now you have two methods of access. | ||
+ | |||
+ | **Private Access**: git clone user@sdf.org:~/git/proj.git \\ | ||
+ | **Public Readonly Access**: git clone http://user.sdf.org/devel/proj.git | ||
===== Further Reading ===== | ===== Further Reading ===== | ||
Line 143: | Line 221: | ||
Best look online for more in-depth tutorials.. | Best look online for more in-depth tutorials.. | ||
I haven't needed these features yet as my projects are all just me, so I don't know how to do it! | I haven't needed these features yet as my projects are all just me, so I don't know how to do it! | ||
+ | |||
+ | $Id: scmgit-intro.html,v 1.6 2011/06/24 16:08:10 jecxjo Exp $ |