git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] Make grafts versionable
@ 2005-11-21 20:54 Johannes Schindelin
  2005-11-21 21:04 ` H. Peter Anvin
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Schindelin @ 2005-11-21 20:54 UTC (permalink / raw)
  To: git


... by moving the location from .git/info/grafts to .gitgrafts. This 
allows checking it in like .gitignore, and sure enough also pulling it (as 
well as knowing who the heck added that particular graft anyway).

Totally untested.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>

---

	This would make half the discussion about rewriting history
	obsolete, methinks.

	Of course, to take advantage of it, you have to move the file 
	.git/info/grafts (if it exists) into the correct place yourself:

		mv -i .git/info/grafts .gitgrafts

 environment.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

applies-to: 20259f7c4418392e0e0c2f3a867811f657498afe
a1756142e3be780ed7992cd6a3f5e64b53c42253
diff --git a/environment.c b/environment.c
index b5026f1..b0c2f79 100644
--- a/environment.c
+++ b/environment.c
@@ -35,7 +35,7 @@ static void setup_git_env(void)
 	}
 	git_graft_file = getenv(GRAFT_ENVIRONMENT);
 	if (!git_graft_file)
-		git_graft_file = strdup(git_path("info/grafts"));
+		git_graft_file = strdup(git_path("../.gitgrafts"));
 }
 
 char *get_git_dir(void)
---
0.99.9.GIT

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [RFC] Make grafts versionable
  2005-11-21 20:54 [RFC] Make grafts versionable Johannes Schindelin
@ 2005-11-21 21:04 ` H. Peter Anvin
  2005-11-21 21:35   ` Linus Torvalds
  0 siblings, 1 reply; 5+ messages in thread
From: H. Peter Anvin @ 2005-11-21 21:04 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin wrote:
> ... by moving the location from .git/info/grafts to .gitgrafts. This 
> allows checking it in like .gitignore, and sure enough also pulling it (as 
> well as knowing who the heck added that particular graft anyway).

This is problematic, because it means something that isn't in GIT_DIR 
affects its interpretation.  I would say that that is a showstopper.

One could even argue that it's incorrect, since it would mean different 
points on the history have different grafts.

Now, CVS has a reserved namespace (CVSROOT/) for things under version 
control which are still significant to CVS.  The logical equivalent to 
git would be to have .git/ be such a namespace, if it makes sense.

	-hpa

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] Make grafts versionable
  2005-11-21 21:04 ` H. Peter Anvin
@ 2005-11-21 21:35   ` Linus Torvalds
  2005-11-21 21:41     ` H. Peter Anvin
  2005-11-22  0:37     ` Johannes Schindelin
  0 siblings, 2 replies; 5+ messages in thread
From: Linus Torvalds @ 2005-11-21 21:35 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Johannes Schindelin, git



On Mon, 21 Nov 2005, H. Peter Anvin wrote:
> 
> Now, CVS has a reserved namespace (CVSROOT/) for things under version control
> which are still significant to CVS.  The logical equivalent to git would be to
> have .git/ be such a namespace, if it makes sense.

Well, there's two reasons for disallowing git from tracking it's own .git 
directory:

 - it protects against people doing somethin glike

	git-update-cache --add -- $(find . -type f | cut -c3..)

   and finding the pre-existing files in ".git"

   This used to literally be how I imported trees into git. These days, 
   you can just do it with "git-ls-files --others", and in fact that is 
   exactly what "git add" does, so now you can just do

	git add .

   and be done with it - without getting that ".git" directory by mistake.

   So that _old_ reason may not be as valid any more.

However, there's one fundamental reason:

 - if you have a file in ".git", that implies that even a "raw git repo" 
   would have versions matter, since technically such a file would be 
   inside the "raw" part. And that I find to be confusing. One of the 
   whole points of a raw git repo is that because it doesn't have anything 
   that is version-controlled and checked out, none of the branches or 
   tags are special, and nothing needs to be updated when you push to such 
   a repo.

   Now, if you have files in .git, suddenly that fundamental nature of a 
   raw repository is no longer clear.

In general, making any internal git data versionable is very confusing. So 
you make the grafts file versionable - that suddenly means that different 
branches may have different parents for the same commit. And that 
depending on which branch you have checked out, git-fsck-cache may result 
in an error, or it may not. That's _nasty_, in my opinion.

So I much prefer to say: everything under ".git" is not versionable, for 
the fundamental reason that the files under .git are "global" to that git 
repository. 

And I think .git/grafts in particular makes no sense to version.

If you want to track a git "grafts" file, you can do it as another git 
repository and a symlink.

		Linus

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] Make grafts versionable
  2005-11-21 21:35   ` Linus Torvalds
@ 2005-11-21 21:41     ` H. Peter Anvin
  2005-11-22  0:37     ` Johannes Schindelin
  1 sibling, 0 replies; 5+ messages in thread
From: H. Peter Anvin @ 2005-11-21 21:41 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Johannes Schindelin, git

Linus Torvalds wrote:
> 
> However, there's one fundamental reason:
> 
>  - if you have a file in ".git", that implies that even a "raw git repo" 
>    would have versions matter, since technically such a file would be 
>    inside the "raw" part. And that I find to be confusing. One of the 
>    whole points of a raw git repo is that because it doesn't have anything 
>    that is version-controlled and checked out, none of the branches or 
>    tags are special, and nothing needs to be updated when you push to such 
>    a repo.
> 
>    Now, if you have files in .git, suddenly that fundamental nature of a 
>    raw repository is no longer clear.
> 

Note that I didn't actually mean that they should necessarily represent 
files in .git/.  The point was more that if we wanted to have 
version-controlled metadata, using .git/ as a namespace would be suitable.

In particular, I believe that if we ever do that, git should obtain this 
metadata from the repository/object database.

> In general, making any internal git data versionable is very confusing. So 
> you make the grafts file versionable - that suddenly means that different 
> branches may have different parents for the same commit. And that 
> depending on which branch you have checked out, git-fsck-cache may result 
> in an error, or it may not. That's _nasty_, in my opinion.
> 
> So I much prefer to say: everything under ".git" is not versionable, for 
> the fundamental reason that the files under .git are "global" to that git 
> repository. 
> 
> And I think .git/grafts in particular makes no sense to version.
> 
> If you want to track a git "grafts" file, you can do it as another git 
> repository and a symlink.

I fully concur with this (as I pointed out in my post, although perhaps 
fuzzily.)

	-hpa

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] Make grafts versionable
  2005-11-21 21:35   ` Linus Torvalds
  2005-11-21 21:41     ` H. Peter Anvin
@ 2005-11-22  0:37     ` Johannes Schindelin
  1 sibling, 0 replies; 5+ messages in thread
From: Johannes Schindelin @ 2005-11-22  0:37 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: H. Peter Anvin, git

Hi,

On Mon, 21 Nov 2005, Linus Torvalds wrote:

> In general, making any internal git data versionable is very confusing. So 
> you make the grafts file versionable - that suddenly means that different 
> branches may have different parents for the same commit. And that 
> depending on which branch you have checked out, git-fsck-cache may result 
> in an error, or it may not. That's _nasty_, in my opinion.

Yes, that is nasty. It does not reflect my normal usage pattern, but that 
does not make it better. So let's forget about that idea of mine.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-11-22  0:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-21 20:54 [RFC] Make grafts versionable Johannes Schindelin
2005-11-21 21:04 ` H. Peter Anvin
2005-11-21 21:35   ` Linus Torvalds
2005-11-21 21:41     ` H. Peter Anvin
2005-11-22  0:37     ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).