See also: ManagingCondorSourceTreesWithGit
This page is the place for Git wisdom as it is discovered/created until it can be filed in a more permanent location.
{section: gitweb (bonsai-like support) on bonsai.cs.wisc.edu}
A Gitweb service is running on bonsai.cs.wisc.edu, http://bonsai.cs.wisc.edu/gitweb/gitweb.cgi
{subsection: gitweb setup}
The Apache Httpd service on bonsai has the following additional configuration:
{code}
AllowOverride none
Options ExecCGI -Indexes
AuthType basic
AuthName "Condor Team"
AuthUserFile /var/www/conf/bonsai.passwd
require valid-user
Alias gitweb /var/www/gitweb
Alias gitweb/ /var/www/gitweb/
{endcode}
The gitweb CGI is installed under =/var/www/html/gitweb= and links to the projects that are available via gitweb are created under =/var/www/html/gitweb/projects=
Additional note, the gitweb.cgi needed some modification to work on the old RH9 box that is bonsai.cs.wisc.edu. Uses of =decode_utf8= can only take one argument, and printing = = and =⋅= seems to be problematic. All changes are marked with a =# FW= comment.
{section: git-daemon (git:// URL support) on bonsai.cs.wisc.edu (CURRENTLY DISABLED)}
This is a read-only git-daemon run on bonsai.cs.wisc.edu. It can service commands =git-fetch=, =git-pull=, =git-clone= and =git-archive=.
To access it us the URL =git://bonsai/= + =CONDOR_SRC.git=, =CONDOR_DOC.git=, or =CONDOR_EXT.git=, e.g. =git clone git://bonsai/CONDOR_SRC.git=.
{subsection: git-daemon setup}
git-daemon runs as an xinetd service as the apache user, which has an AFS token to access the repository.
{code}
$ grep 9418 /etc/services
git 9418/tcp git-daemon
$ cat /etc/xinetd.d/git-daemon
# description: The git server offers access to git repositories
service git
{
disable = yes
type = UNLISTED
port = 9418
socket_type = stream
wait = no
user = apache
server = /unsup/git/bin/git-daemon
server_args = --inetd --export-all --enable=upload-archive --base-path=/var/www/html/gitweb/projects
log_on_failure += USERID
{endcode}
To enable/disable this service change the =disable = yes|no= line in the =/etc/xinitd.d/git-daemon= and remember to send a =SIGHUP= to the =xinetd= process.
{section: Checking if I need to git push}
To check if you need to =git push= changes upstream, you can use =git push --dry-run=. Note that this may require a newer version of git than is available in /unsup as of March 26, 2008. It will be upgraded soon.
{section: Using git with ssh public key authentication}
In order to use git with ssh and public key authentication, you need to do the following:
Create a file =/etc/krb5.conf= with the following contents:
{code}[libdefaults]
default_realm = CS.WISC.EDU
[realms]
CS.WISC.EDU = {
kdc = kerberos.CS.WISC.EDU:88
kdc = kerberos-1.CS.WISC.EDU:88
kdc = kerberos-2.CS.WISC.EDU:88
admin_server = kerberos.CS.WISC.EDU
default_domain = CS.WISC.EDU
}
[domain_realm]
.cs.wisc.edu = CS.WISC.EDU
cs.wisc.edu = CS.WISC.EDU
.stat.wisc.edu = CS.WISC.EDU
stat.wisc.edu = CS.WISC.EDU
{endcode}
Get a Kerberos ticket: =kinit= username
Add the following to your =~/.ssh/config= file:
{code}Host gitssh
User username
Hostname host.cs.wisc.edu
ChallengeResponseAuthentication no
PreferredAuthentications gssapi-with-mic,password
ForwardAgent yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
{endcode}
Then, the repository is available at: =ssh://gitssh/p/condor/repository/CONDOR_SRC.git=
{section: Pushing only a single branch}
A naked =git push= will try to push *all* branches up, which may not be what you want. Even if you don't have changes on some branches, it will check if the origin is newer and will complain if the branch is pushed. For example, if you've made changes to V7_0-branch, but not the master, but the master has changed on the upstream git repository, you might see this:
{code}
% git push
Counting objects: 9, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 767 bytes, done.
Total 5 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
To /p/condor/repository/CONDOR_SRC.git
3082206..2f05b12 V7_0-branch -> V7_0-branch
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '/p/condor/repository/CONDOR_SRC.git'
{endcode}
This is harmless, but distracting. The solution is to push only the branch you care about: =git push origin V7_0-branch=
{section: Hooks}
The post-update hook is run after every push. We've changed this (in $GIT_DIR/hook/post-update) to run git update-server-info, so that it doesn't need
to be done by hand anymore.
{section: What releases include this commit}
It's occasionally useful to determine which releases include a given commit, typically so you know which branches you need to fix a bug on. Assuming you're interested in commit a56c825f, use the following:
{code}
git tag --contains a56c825f | egrep '^V[0-9]*_[0-9]*_[0-9]*$'
{endcode}