Re: Commiting automatically
On 10-09-25 12:05, Alex Riesen wrote:
> On Fri, Sep 24, 2010 at 22:43, Maaartin <grajcar1@seznam.cz> wrote:
>> I'm going to run periodically a process which uses the current working tree
Show 19 quoted lines
>> I'd like to protocol what happens. As a part of the protocol I need the exact
>> state of the working tree and that's what is git good for, right? But it must
>> neither disturb my normal workflow nor interfere with my ordinal commits. I
>> could probably use something like
>
> Try using low-level git commands (the "plumbing").
> Take a look at GIT_INDEX_FILE environment variable and
> "git write-tree", "git commit-tree" and "git update-ref", in
> addition to "git add".
>
> I.e. (untested):
>
> $ (
> export GIT_INDEX_FILE=.git/myindex
> git add . &&
> tree=$(git write-tree) &&
> commit=$(date |git commit-tree $tree -p protocol) &&
> git update-ref -m autolog protocol $commit
> )
Based on this, I've created a simple script "git-autocom" which seems to work somehow. In order to test it place both attachments in a new directory and run "test-git-autocom". The test creates a new working tree with a repository and some commits and then invokes "git-autocom".
A branch autocom gets created, but I'm quite unsure if it's correct. I see a problem in case the script runs with the branch autocom checked out. Maybe a tag could be better or whatever.
I see I can attach no files here in http://post.gmane.org
So I placed them in http://dl.dropbox.com/u/4971686/101010/git-autocom and http://dl.dropbox.com/u/4971686/101010/test-git-autocom and copied them here as well (I hope there's a better way).
====== git-autocom #!/bin/sh message="autocom $(date)" head=$(git show-ref -s --head HEAD)
# the first parent should be autocom parent1="-p $(git show-ref -s refs/heads/autocom)" # needed for the very first use test -f .git/refs/heads/autocom || parent1="" # the second parent should be the current head parent2="-p $head" # make sure not giving the same parent twice test "$parent1" = "$parent2" && parent1=""
#temporary index export GIT_INDEX_FILE=.git/autocom.tmp
git add -A && tree=$(git write-tree) && commit=$(echo "$message" | git commit-tree $tree $parent1 $parent2) && git update-ref -m "$message" refs/heads/autocom $commit ====== test-git-autocom #!/bin/sh
/bin/rm -fR testtree 2>/dev/null mkdir testtree && cd testtree && git init && echo a > a && git add -A && git commit -m "a" && echo b > b && git add -A && git commit -m "b" && echo c > c && /bin/rm b && git add -A && /bin/rm a && echo "preparation OK" && ../git-autocom && echo "autocom OK" && git log && git log autocom ======