git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Windows symlinks
@ 2008-06-24 22:42 Patrick.Higgins
  2008-06-24 23:18 ` Avery Pennarun
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Patrick.Higgins @ 2008-06-24 22:42 UTC (permalink / raw)
  To: git

It looks like one of the bigger (biggest?) hurdles for git adoption at my company is going to be handling symlinks on Windows. We may be able to sidestep the issue entirely by having developers run Linux in a virtual machine (or better yet, Windows in a VM) because we deploy to Linux and thus can make a very strong argument that developers should develop on Linux, too. That run into an image problem where people might start blaming git for needing to have an extra operating system around just for revision control.

We currently use Clearcase snapshot views on Windows and it has some kind of magic to be able to deal with symlinks. I haven't actually used the Windows version of Clearcase so I don't know how it does it, but my understanding is that it handles them with copies, and I guess it somehow knows to update all the copies when a change is made.

Has anyone thought about a way for git to handle symlinks? Vista seems to have added native symlinks, but you need have elevated privilege to create them. NTFS junction points seem helpful for older versions of Windows, but don't work for anything except directories, and seem to be dangerous to use with tools that do recursive deletes. Neither junction points nor native symlinks sound like great options.

Cygwin's clever symlink trick seems to work pretty well in practice. I'm not exactly sure what it's doing, but it seems to create a shortcut that it's own programs understand. Some other non-Cygwin programs seem to understand them, too, but Java does not which is a big problem for me.

I just don't see any good solutions here. Does anyone have any better ideas?

Thanks,
Patrick

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

* Re: Windows symlinks
  2008-06-24 22:42 Windows symlinks Patrick.Higgins
@ 2008-06-24 23:18 ` Avery Pennarun
  2008-06-26  3:50   ` Jay Soffian
  2008-06-24 23:28 ` Jakub Narebski
  2008-06-24 23:29 ` Robin Rosenberg
  2 siblings, 1 reply; 9+ messages in thread
From: Avery Pennarun @ 2008-06-24 23:18 UTC (permalink / raw)
  To: Patrick.Higgins@cexp.com; +Cc: git

On 6/24/08, Patrick.Higgins@cexp.com <Patrick.Higgins@cexp.com> wrote:
>  Cygwin's clever symlink trick seems to work pretty well in practice. I'm not exactly sure what
> it's doing, but it seems to create a shortcut that it's own programs understand. Some other
> non-Cygwin programs seem to understand them, too, but Java does not which is a big
> problem for me.

It seems somewhat odd that your developers are relying on an operating
system feature that doesn't even exist.  I might suggest one of:

- add an abstraction layer to your Java applet that understands
cygwin-style symlinks

- actually just check in the file multiple times; git will store it
efficiently anyway

- improve your Makefile to automatically copy the files and/or create
symlinks at build time rather than storing the symlinks in revision
control.

My understanding of Clearcase is that it actually loads a virtual
filesystem driver in Windows and does all kinds of insane magic -
slowly and inefficiently, too - behind the scenes.  Something tells me
git (and every other VCS :)) really doesn't want to go there.

Have fun,

Avery

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

* Re: Windows symlinks
  2008-06-24 22:42 Windows symlinks Patrick.Higgins
  2008-06-24 23:18 ` Avery Pennarun
@ 2008-06-24 23:28 ` Jakub Narebski
  2008-06-24 23:42   ` Patrick.Higgins
  2008-06-24 23:29 ` Robin Rosenberg
  2 siblings, 1 reply; 9+ messages in thread
From: Jakub Narebski @ 2008-06-24 23:28 UTC (permalink / raw)
  To: Patrick Higgins; +Cc: git

Patrick Higgins <Patrick.Higgins@cexp.com> writes:

> It looks like one of the bigger (biggest?) hurdles for git adoption
> at my company is going to be handling symlinks on Windows. We may be
> able to sidestep the issue [...] by [...] run[ning] Linux
> in a virtual machine [...]

If only MS Windows supported other filesystems which have symlinks...

> Has anyone thought about a way for git to handle symlinks? Vista
> seems to have added native symlinks, but you need have elevated
> privilege to create them. NTFS junction points seem helpful for
> older versions of Windows, but don't work for anything except
> directories, and seem to be dangerous to use with tools that do
> recursive deletes. Neither junction points nor native symlinks sound
> like great options.
> 
> Cygwin's clever symlink trick seems to work pretty well in
> practice. I'm not exactly sure what it's doing, but it seems to
> create a shortcut that it's own programs understand. Some other
> non-Cygwin programs seem to understand them, too, but Java does not
> which is a big problem for me.

First, I think that both "git on Windows" solutions, namely Cygwin and
msysGit port, don't use symlinks either in installed programs, nor in
repository layout.

Second, the problem there can be _only_ if your repository contains
(or contained) symlinks, and then it is your own damn fault.  I don't
know how Cygwin, or msysGit deals with symlinks in a wirking
directory, but you can work around symlinks (although in a bit
unwieldy way) by using `core.symlinks' configuration variable;
see git-config(1):

 core.symlinks::
        If false, symbolic links are checked out as small plain files
        that contain the link text. git-update-index(1) and git-add(1)
        will not change the recorded type to regular file. Useful on
        filesystems like FAT that do not support symbolic links. True
        by default.

-- 
Jakub Narebski
Poland
ShadeHawk on #git

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

* Re: Windows symlinks
  2008-06-24 22:42 Windows symlinks Patrick.Higgins
  2008-06-24 23:18 ` Avery Pennarun
  2008-06-24 23:28 ` Jakub Narebski
@ 2008-06-24 23:29 ` Robin Rosenberg
  2 siblings, 0 replies; 9+ messages in thread
From: Robin Rosenberg @ 2008-06-24 23:29 UTC (permalink / raw)
  To: Patrick.Higgins; +Cc: git

onsdagen den 25 juni 2008 00.42.49 skrev Patrick.Higgins@cexp.com:
> It looks like one of the bigger (biggest?) hurdles for git adoption at my company is going to be handling symlinks on Windows. We may be able to sidestep the issue entirely by having developers run Linux in a virtual machine (or better yet, Windows in a VM) because we deploy to Linux and thus can make a very strong argument that developers should develop on Linux, too. That run into an image problem where people might start blaming git for needing to have an extra operating system around just for revision control.

Right, they could use only Linux and not have an extra OS for email..
> 
> We currently use Clearcase snapshot views on Windows and it has some kind of magic to be able to deal with symlinks. I haven't actually used the Windows version of Clearcase so I don't know how it does it, but my understanding is that it handles them with copies, and I guess it somehow knows to update all the copies when a change is made.

It is one of the few sane things clearcase does. msysgit's approach is just unusable. I've not come up with the patches yet. Clearcase makes copies
instead of the symlinks and updates them on checkout/checkin and update.
Git could do one step better by updating copies when index is updated, avoiding an unnecessary commit (which is pretty annoying in CC).
Invalid symlinks, i.e. pointing at non-existent objects or outside then VOB (repository in Git parlance, don't show up at all in snapshot views. Git could do the same thereby making the workdir usable
when it contains and depends on symlinks.

> Has anyone thought about a way for git to handle symlinks? Vista seems to have added native symlinks, but you need have elevated privilege to create
> them. NTFS junction points seem helpful for older versions of Windows, but don't work for anything except directories, and seem to be dangerous to use with tools that do recursive deletes. Neither junction points nor native symlinks sound like great options. 
Obviously one could make this a switchable feature and enable it when the
file system supports it. As for junction points i'd say no too. What little testing I did on symlinks in vista they seem capable of most sane uses.

> Cygwin's clever symlink trick seems to work pretty well in practice. I'm not exactly sure what it's doing, but it seems to create a shortcut that it's own programs understand. Some other non-Cygwin programs seem to understand them, too, but Java does not which is a big problem for me.
> 
> I just don't see any good solutions here. Does anyone have any better ideas?

No, copies. If you have a patch I can test it and then implement it for jgit, which doesn't have symlinks either.

-- robin

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

* RE: Windows symlinks
  2008-06-24 23:28 ` Jakub Narebski
@ 2008-06-24 23:42   ` Patrick.Higgins
  2008-06-25  0:04     ` Avery Pennarun
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick.Higgins @ 2008-06-24 23:42 UTC (permalink / raw)
  To: jnareb; +Cc: git

> From: Jakub Narebski [mailto:jnareb@gmail.com]
> 
> Patrick Higgins <Patrick.Higgins@cexp.com> writes:
> 
> Second, the problem there can be _only_ if your repository contains
> (or contained) symlinks, and then it is your own damn fault.

Agreed. The first thing we started working on was getting symlinks out of our repositories. Unfortunately, we chose to use them because we are using broken development tools that don't support proper modularity. We found the best way to get the IDE's compilation to work was to symlink shared code into each project. It's a nasty solution, but it was the only one that worked. Clearcase made this solution possible. As powerful and flexible as git is, it would have left us out in the cold in this situation.


> I don't know how Cygwin, or msysGit deals with symlinks in a wirking
> directory

msysGit just created a file with the target of the symlink as it's contents, but its tools didn't know how to make use of it. I think Cygwin did the same thing, but ls, cat, and all the other Cygwin tools were able to make use of it. I tried to run the Java compiler over a symlinked file and it didn't work, though.

Copying files at build time is an interesting idea, but since the point was to get an IDE's build system to work, I don't I'll have the level of control I would need to make this work.

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

* Re: Windows symlinks
  2008-06-24 23:42   ` Patrick.Higgins
@ 2008-06-25  0:04     ` Avery Pennarun
  2008-06-25 17:50       ` Patrick.Higgins
  0 siblings, 1 reply; 9+ messages in thread
From: Avery Pennarun @ 2008-06-25  0:04 UTC (permalink / raw)
  To: Patrick.Higgins@cexp.com; +Cc: jnareb, git

On 6/24/08, Patrick.Higgins@cexp.com <Patrick.Higgins@cexp.com> wrote:
> Agreed. The first thing we started working on was getting symlinks out of our repositories.
> Unfortunately, we chose to use them because we are using broken development tools that
> don't support proper modularity. We found the best way to get the IDE's compilation to work
> was to symlink shared code into each project. It's a nasty solution, but it was the only one
> that worked. Clearcase made this solution possible. As powerful and flexible as git is, it would
> have left us out in the cold in this situation.

Perhaps git-submodule would do what you're looking for.

Avery

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

* RE: Windows symlinks
  2008-06-25  0:04     ` Avery Pennarun
@ 2008-06-25 17:50       ` Patrick.Higgins
  2008-06-26  6:33         ` Andreas Ericsson
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick.Higgins @ 2008-06-25 17:50 UTC (permalink / raw)
  To: apenwarr; +Cc: jnareb, git

> From: Avery Pennarun [mailto:apenwarr@gmail.com]
>
> > Agreed. The first thing we started working on was getting 
> symlinks out of our repositories.
> > Unfortunately, we chose to use them because we are using 
> broken development tools that
> > don't support proper modularity. We found the best way to 
> 
> Perhaps git-submodule would do what you're looking for.

We might be able to get by with them, but submodules appear to be significantly more complex than symlinks, and we sometimes symlink just a file or two if that's all we need. Splitting up submodules to that level of granularity would be hard to manage.

My understanding of the submodule workflow is:

Projects A, B, and C (we actually have about 17 of these) all share common code in project Common. Then, each of A, B, and C adds Common as a submodule. While working on project A, the need arises to modify Common, so the developer changes it there, commits, pushes the change to Common, then commits and pushes the change to A. To update B and C, they would have to change to each of those projects, run a git pull, then git submodule update, and compile and test.

Is that correct? If so, it's a lot more work than letting a symlink propagate the change to all the other projects. Of course, since Windows doesn't have symlinks...

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

* Re: Windows symlinks
  2008-06-24 23:18 ` Avery Pennarun
@ 2008-06-26  3:50   ` Jay Soffian
  0 siblings, 0 replies; 9+ messages in thread
From: Jay Soffian @ 2008-06-26  3:50 UTC (permalink / raw)
  To: Avery Pennarun; +Cc: Patrick.Higgins@cexp.com, git

On Tue, Jun 24, 2008 at 7:18 PM, Avery Pennarun <apenwarr@gmail.com> wrote:
> My understanding of Clearcase is that it actually loads a virtual
> filesystem driver in Windows and does all kinds of insane magic -

Just FYI, this is only the case if you're using so-called dynamic
views, which require the MVFS
driver, as you say. The OP said he was using snapshot views -- these
don't use MVFS and instead just checkout to the OS's native
filesystem.

j.

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

* Re: Windows symlinks
  2008-06-25 17:50       ` Patrick.Higgins
@ 2008-06-26  6:33         ` Andreas Ericsson
  0 siblings, 0 replies; 9+ messages in thread
From: Andreas Ericsson @ 2008-06-26  6:33 UTC (permalink / raw)
  To: Patrick.Higgins; +Cc: apenwarr, jnareb, git

Patrick.Higgins@cexp.com wrote:
>> From: Avery Pennarun [mailto:apenwarr@gmail.com]
>> 
>>> Agreed. The first thing we started working on was getting
>> symlinks out of our repositories.
>>> Unfortunately, we chose to use them because we are using
>> broken development tools that
>>> don't support proper modularity. We found the best way to
>> Perhaps git-submodule would do what you're looking for.
> 
> We might be able to get by with them, but submodules appear to be
> significantly more complex than symlinks, and we sometimes symlink
> just a file or two if that's all we need. Splitting up submodules to
> that level of granularity would be hard to manage.
> 
> My understanding of the submodule workflow is:
> 
> Projects A, B, and C (we actually have about 17 of these) all share
> common code in project Common. Then, each of A, B, and C adds Common
> as a submodule. While working on project A, the need arises to modify
> Common, so the developer changes it there, commits, pushes the change
> to Common, then commits and pushes the change to A. To update B and
> C, they would have to change to each of those projects, run a git
> pull, then git submodule update, and compile and test.
> 
> Is that correct? If so, it's a lot more work than letting a symlink
> propagate the change to all the other projects. Of course, since
> Windows doesn't have symlinks...

That is correct, but you only need to do the change if the projects
B, C, D, n... actually requires the new feature/bugfix introduced in
Common. Otherwise you can just leave it as-is.

Besides, when an important bugfix is added to Common, you probably
want to cut new releases from B, C, D, n... anyway, so it still
means doing stuff to those repositories.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

end of thread, other threads:[~2008-06-26  6:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-24 22:42 Windows symlinks Patrick.Higgins
2008-06-24 23:18 ` Avery Pennarun
2008-06-26  3:50   ` Jay Soffian
2008-06-24 23:28 ` Jakub Narebski
2008-06-24 23:42   ` Patrick.Higgins
2008-06-25  0:04     ` Avery Pennarun
2008-06-25 17:50       ` Patrick.Higgins
2008-06-26  6:33         ` Andreas Ericsson
2008-06-24 23:29 ` Robin Rosenberg

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).