All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Björn Steinbrink" <B.Steinbrink@gmx.de>
To: Al Boldi <a1426z@gawab.com>
Cc: Andreas Ericsson <ae@op5.se>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Phillip Susi <psusi@cfl.rr.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Jing Xue <jingxue@digizenstudio.com>,
	linux-kernel@vger.kernel.org, git@vger.kernel.org
Subject: Re: git guidance
Date: Fri, 7 Dec 2007 23:00:25 +0100	[thread overview]
Message-ID: <20071207220025.GD2001@atjola.homenet> (raw)
In-Reply-To: <200712071353.11654.a1426z@gawab.com>

[-- Attachment #1: Type: text/plain, Size: 3930 bytes --]

On 2007.12.07 13:53:11 +0300, Al Boldi wrote:
> Andreas Ericsson wrote:
> > So, to get to the bottom of this, which of the following workflows is it
> > you want git to support?
> >
> > ### WORKFLOW A ###
> > edit, edit, edit
> > edit, edit, edit
> > edit, edit, edit
> > Oops I made a mistake and need to hop back to "current - 12".
> > edit, edit, edit
> > edit, edit, edit
> > publish everything, similar to just tarring up your workdir and sending
> > out ### END WORKFLOW A ###
> >
> > ### WORKFLOW B ###
> > edit, edit, edit
> > ok this looks good, I want to save a checkpoint here
> > edit, edit, edit
> > looks good again. next checkpoint
> > edit, edit, edit
> > oh crap, back to checkpoint 2
> > edit, edit, edit
> > ooh, that's better. save a checkpoint and publish those checkpoints
> > ### END WORKFLOW B ###
> 
> ### WORKFLOW C ###
> for every save on a gitfs mounted dir, do an implied checkpoint, commit, or 
> publish (should be adjustable), on its privately created on-the-fly 
> repository.
> ### END WORKFLOW C ###
> 
> For example:
> 
>   echo "// last comment on this file" >> /gitfs.mounted/file
> 
> should do an implied checkpoint, and make these checkpoints immediately 
> visible under some checkpoint branch of the gitfs mounted dir.
> 
> Note, this way the developer gets version control without even noticing, and 
> works completely transparent to any kind of application.

Ouch... That looks worse than "plain" per-file versioning. Not only do
you per definition get "broken" commits if there's a change that affects
two dependent files, you also get an insane amount of commits just for
testing stuff, or fixing bugs.

And unless you use some kind of union-fs on top (or keep ignored files
in special unversioned area in your gitfs, which seems somewhat ugly),
you'll probably also have to track lots of files in the working
directory that are generated, unless you want to re-generate them after
each reboot. And that leads to even more absolutely useless revisions.

Just thinking of my vim .swp files (which I definitely don't want to
loose on a crash/power outtage/pkill -9 .<ENTER> dammit) makes me scream
because of the gazillion of commits they will produce (and no, I don't
want them in some special out of tree directory).

Plus, I have vim setup to _replace_ files on write, so that I can more
easily use hard-linked copies with changing all copies at once _unless_
I explicitly want to, meaning that I'd get full remove/add commits,
which are absolutely useless. And trying to detect such patterns
(rename, then write the changed file with the old name and then delete
the renamed file) is probably not worth the trouble, because you
coincidently might _want_ to have just these three steps recorded when
you happen to perform them manually. And if you go for heuristics,
you'll complain each time you get a false-positive/negative.


That said, out of pure curiousness I came up with the attached script
which just uses inotifywait to watch a directory and issue git commands
on certain events. It is extremely stupid, but seems to work. And at
least it hasn't got the drawbacks of a real gitfs regarding the need to
have a "separate" non-versioned storage area for the working directory,
because it simply uses the existing working directory wherever that
might be stored. It doesn't use GIT_DIR/WORK_DIR yet, but hey, should be
easy to add...

Feel free to mess with that thing, hey, maybe you even like it and
extend it to match your proposed workflow even more. I for sure won't
use or even extend it, so you're likely on your own there.

Side-note: Writing that script probably took less time than writing this
email and probably less time than was wasted on this topic. Makes me
want to use today's preferred "Code talks, b...s... walks" statement,
but I'll refrain from that... Just because I lack the credibility to say
that, and the script attached is quite crappy ;-)

Björn

[-- Attachment #2: git-watch --]
[-- Type: text/plain, Size: 814 bytes --]

#!/bin/bash
inotifywait -m -r --exclude ^\./\.git/.* -e close_write -e move -e create -e delete . 2>/dev/null |
while read FILE_PATH EVENT FILE_NAME
do
	FILE_NAME="$FILE_PATH$FILE_NAME"
	FILE_NAME=${FILE_NAME#./}

	# git doesn't care about directories
	if [ -d "$FILE_NAME" ]
	then
		continue
	fi

	case "$EVENT" in
		*CLOSE_WRITE*)
		ACTION=change
		;;
		*MOVED_TO*)
		ACTION=create
		;;
		*MODIFY*)
		ACTION=change
		;;
		*DELETE*)
		ACTION=delete
		;;
		*MOVED_FROM*)
		ACTION=delete
		;;
		*CREATE*)
		ACTION=create
		;;
		*)
		continue
		;;
	esac

	case $ACTION in
		create)
		git add "$FILE_NAME"
		git commit -m "$FILE_NAME created"
		;;
		delete)
		git rm --cached "$FILE_NAME"
		git commit -m "$FILE_NAME removed"
		;;
		change)
		git add "$FILE_NAME"
		git commit -m "$FILE_NAME changed"
		;;
	esac
done

  parent reply	other threads:[~2007-12-07 22:00 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-29 15:52 git guidance Jing Xue
2007-11-29 16:19 ` Linus Torvalds
2007-12-01  6:50   ` Al Boldi
2007-12-04 22:21     ` Phillip Susi
2007-12-07 17:35       ` Al Boldi
2007-12-06 18:24         ` Andreas Ericsson
2007-12-07 18:55           ` Al Boldi
2007-12-06 20:22             ` Johannes Schindelin
2007-12-07  4:37               ` Al Boldi
2007-12-07  8:40                 ` Andreas Ericsson
2007-12-07 10:53                   ` Al Boldi
2007-12-07 11:47                     ` Jakub Narebski
2007-12-07 19:04                       ` Al Boldi
2007-12-07 19:36                         ` Valdis.Kletnieks
2007-12-07 22:07                           ` Luke Lu
2007-12-08  4:56                           ` Al Boldi
2007-12-08  5:16                             ` Valdis.Kletnieks
2007-12-08 10:41                               ` Al Boldi
2007-12-08 11:13                         ` Johannes Schindelin
2007-12-07 12:30                     ` Andreas Ericsson
2007-12-07 21:17                     ` david
2007-12-07 22:00                     ` Björn Steinbrink [this message]
2009-08-28 12:30                       ` inotify-commit, was " Johannes Schindelin
2007-12-06 21:46             ` Phillip Susi
2007-12-08  6:33     ` Martin Langhoff
  -- strict thread matches above, loose matches on Subject: below --
2007-11-27 22:33 Tilman Schmidt
2007-11-27 22:54 ` J. Bruce Fields
2007-11-27 22:55 ` Kristoffer Ericson
2007-11-27 23:52   ` Willy Tarreau
2007-11-28  0:43     ` Kristoffer Ericson
2007-11-28  0:49     ` Randy Dunlap
2007-11-28 12:49     ` Al Boldi
2007-11-28 13:45       ` Rogan Dawes
2007-11-28 15:46         ` Johannes Schindelin
2007-11-28 17:14           ` Al Boldi
2007-11-28 18:14             ` Johannes Schindelin
2007-11-28 18:30               ` Al Boldi
2007-11-28 18:41                 ` Jakub Narebski
2007-11-28 18:41                   ` Jakub Narebski
2007-11-29  5:27                 ` Al Boldi
2007-11-29 12:57                   ` Kyle Moffett
2007-11-28 13:38     ` Tilman Schmidt
2007-11-28 21:20       ` Willy Tarreau
2007-11-28 11:23   ` Tilman Schmidt
2007-11-28 12:31     ` Kristoffer Ericson
2007-11-27 23:20 ` Jan Engelhardt
2007-11-28 15:15   ` Dave Quigley
2007-11-28 15:57     ` Tilman Schmidt
2007-11-28 16:37       ` Dave Quigley
2007-11-28 19:10         ` willem
2007-11-28 19:18           ` Dave Quigley
2007-11-28 23:22   ` Haavard Skinnemoen
2007-11-29 12:45     ` Tilman Schmidt
2007-11-29 13:03       ` Haavard Skinnemoen
2007-11-28  7:41 ` Arkadiusz Miskiewicz
2007-11-29 12:51   ` Tilman Schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071207220025.GD2001@atjola.homenet \
    --to=b.steinbrink@gmx.de \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=a1426z@gawab.com \
    --cc=ae@op5.se \
    --cc=git@vger.kernel.org \
    --cc=jingxue@digizenstudio.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=psusi@cfl.rr.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.