From: Junio C Hamano Date: Fri, 29 Apr 2005 18:47:54 GMT Subject: Re: [PATCh] jit-trackdown Message-ID: <7voebx4dyd.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <42725AB8.5090501@dgreaves.com> >>>>> "DG" == David Greaves writes: DG> Should really be cg-trackdown Thanks for your kind words and the patch. head="$1" +if [ $head == "HEAD" ]; then + head=$(cat .git/HEAD) +elif [ -f .git/refs/tags/$head ]; then + head=$(cat .git/refs/tags/$head) +elif [ -f .git/refs/heads/$head ]; then + head=$(cat .git/refs/heads/$head) +fi + I have been primarily looking at the plumbing side and not the toilet side, and I still have not grokked cg-* yet. That's why I did not do the right thing with these .git/refs/* stuff. If this were to become part of cg-* suite, I would recommend just using $(commit-id) there, which should be the only one that needs to know the .git/* structure convention. Have toilet side gitters reached a concensus (or semi-concensus) on how things under .git/ should be organized? Is there a summary somewhere, something along the following lines? In subdirectories under $GIT_PROJECT_TOP/.git, you have files that have some special meaning to the Cogito layer. These files are all 41-byte long, which stores a 40-byte SHA1 with terminating newline. What is stored in each location is as follows: .git/HEAD Head commit object of the current tree. .git/refs/heads/$ext Head commit object of the external tree $ext. [*Q1*] .git/refs/tags/$tag Named Tag object. [*Q2*] *Q1* What is the syntax and semantics rule for $ext, like "$ext matches '^[-A-Za-z0-9_]$' and is one of the entries in .git/remotes"? *Q2* What is the syntax and semantics rule for $tag, like "$tag matches '^[-A-Za-z0-9_]$' and can be anything not just commit"?