Re: git-rev-tree
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Nov 8, 2005, 02:33 UTC
- Message-ID
- <Pine.LNX.4.64.0511071819510.3247@g5.osdl.org>
- In-Reply-To
- <20051108021232.GB10835@redhat.com>
On Mon, 7 Nov 2005, Dave Jones wrote:
> > Can someone remind me what the deprecated git-rev-tree command did, > or how this should be fixed up to use newer git commands?
It was basically the same as "git-rev-list", except:
- it output the date (as a raw number) in front, so pretty much everybody ended up using "cut" to remove it, sometimes after sorting the output numerically.
Sorting numerically is unnecessary with git-rev-list, since the output is already sorted (not necessarily exactly by date, but by "recency" and/or by other even stricter sorting rules)
- it was limited to a certain number of heads maximum (I forget, but I think it was 16).
- it parsed the whole tree before outputting anything.
> I'm trying to get git-changes-script working, but all the > variants I've found on the web use this deprecated tool.
The git-changes-script was pretty broken.
You're _much_ better off doing it by:
- fetch the "remote" branch into the local repository. The "git-changes-script" thing required that you fetch the remote branch into _another_ repository, but still local. These days, just use a local branch in the same repo.
So, for example, tracking my tree
export KERNEL=master.kernel.org:/pub/scm/linux/kernel/git/ git fetch $KERNEL/torvalds/linux-2.6 master:linus
which will just fetch my "master" branch into the local "linus" branch.
- then just do
git log linus..HEAD
and you'll see exactly what you wanted: what exists in your HEAD but not in mine.
No complex script required.
Now, I've told some people that the diffstat is just the same (ie using a simple "git diff linus..HEAD | git-apply --stat") but that was because I've been muching some really awesomely bad 'shrooms. Clearly that doesn't work well at all, since it will show all the stuff I have in my branch reversed (since your head doesn't have it).
The way to get a diff is really to do a merge, and throw the merge away after creating the diff. Ie something like this should work:
git checkout -b merge-branch git merge "dummy merge" master linus && git-diff linus.. | git-apply --stat git checkout -f master git branch -D merge-branch
which will also tell you if the merge failed (in which case you might not want to send me a "please pull", but instead try the merge locally and fix it up, and then try again)
All of the above is obviously totally untested.
Linus