threads / discuss / 49476

inside the git folder

Subject: inside the git folder

## tl;dr

5 messages between Oct 3, 2018 and Oct 4, 2018.

replies: 4people: 4as markdown or json

Chris Jeschke· Oct 3, 2018, 12:26 UTC · lore

Hey git-team, I am working on a plug-in for a distributed pair programming tool. To skip the details: I was thinking about sending parts of the git folder as a zip folder with our own Bytestream instead of using the git API. Is there a common sense about what should and what shouldn't be done when working with the files inside the git folder?

Kind Regards,
Christian
Stefan Beller· Oct 3, 2018, 18:51 UTC · re: Chris Jeschke · lore

Re: inside the git folder

On Wed, Oct 3, 2018 at 5:26 AM Chris Jeschke <chrisjberlin@googlemail.com> wrote:

Show 7 quoted lines
>
> Hey git-team,
> I am working on a plug-in for a distributed pair programming tool. To
> skip the details: I was thinking about sending parts of the git folder
> as a zip folder with our own Bytestream instead of using the git API.
> Is there a common sense about what should and what shouldn't be done
> when working with the files inside the git folder?
This contradicts the security model of git.
Locally I can do things like:
    git config alias.co "rm -rf ~"
    echo "rm -rf ~" >.git/hooks/{...}
and I would experience bad things, but that is ok,
as I configured it locally (supposedly I know what
I am doing); but if I have the ability to send these
tricks to my beloved coworkers, hilarity might ensue.
What stuff do you need to send around?

objects? Fine, as the receive could check they are good using fsck.

refs/ ? Sure. It may be confusing to users, but I am sure you'll figure UX out.

local config, hooks ? I would not.
Not sure what else you'd think of sending around.

Cheers, Stefan

Chris Jeschke· Oct 4, 2018, 07:42 UTC · re: Stefan Beller · lore

Re: inside the git folder

Hi Stefan,
thanks for your answer.

The Goal after sending the files is to have a copy on the remote site. This includes that the working directory is the same (what we already guarantee with our tool) and that git is at the same 'state' (that means that we have the same history and that we checkout at the same branch/commit). My idea: Send the working directory with our tool Initialize a Git directory on the remote side Send the 'objects','refs', 'HEAD' and the 'gitignore' with our tool

Is there anything else I should take care of?
Am Mi., 3. Okt. 2018 um 20:51 Uhr schrieb Stefan Beller <sbeller@google.com>:
Show 34 quoted lines
>
> On Wed, Oct 3, 2018 at 5:26 AM Chris Jeschke
> <chrisjberlin@googlemail.com> wrote:
> >
> > Hey git-team,
> > I am working on a plug-in for a distributed pair programming tool. To
> > skip the details: I was thinking about sending parts of the git folder
> > as a zip folder with our own Bytestream instead of using the git API.
> > Is there a common sense about what should and what shouldn't be done
> > when working with the files inside the git folder?
>
> This contradicts the security model of git.
> Locally I can do things like:
>     git config alias.co "rm -rf ~"
>     echo "rm -rf ~" >.git/hooks/{...}
> and I would experience bad things, but that is ok,
> as I configured it locally (supposedly I know what
> I am doing); but if I have the ability to send these
> tricks to my beloved coworkers, hilarity might ensue.
>
> What stuff do you need to send around?
>
> objects? Fine, as the receive could check they are
> good using fsck.
>
> refs/ ? Sure. It may be confusing to users,
> but I am sure you'll figure UX out.
>
> local config, hooks ? I would not.
>
> Not sure what else you'd think of sending around.
>
> Cheers,
> Stefan
Johannes Schindelin· Oct 4, 2018, 11:03 UTC · re: Chris Jeschke · lore

Re: inside the git folder

Hi Chris,

as mentioned by Stefan (who is a respected, active core Git contributor, if you need any more arguments to listen to him), it is inappropriate to copy the contents of the .git/ directory wholesale to another user's machine.

For one, it would horribly break in case the user overrode `user.email` in `.git/config`. That's one setting that should not be copied *anywhere*. And that's just one, there are *plenty* more examples. Just think of absolute paths referring to files that probably do not even exist on another machine! Like, worktrees, etc.

Of course, you could start a list of exceptions (files, config keys, etc) that should not be copied. But that's very fragile a solution.

So no, copying the .git/ directory is always the wrong thing to do, as Stefan pointed out.

I could imagine that a much better idea is to identify a *positive* list of things you want to copy over. The output of `git rev-parse --symbolic-full-name HEAD`? Sure. Maybe even the output of `git rev-parse --symbolic-full-name HEAD@{u}`? And then the URL of the corresponding remote? Sure. `.git/objects/alternates/`? Absolutely not.

It is tedious, alright, but you simply cannot copy the contents of .git/ to another machine and expect that to work.

Ciao, Johannes

On Thu, 4 Oct 2018, Chris Jeschke wrote:
Show 52 quoted lines
> Hi Stefan,
> 
> thanks for your answer.
> 
> The Goal after sending the files is to have a copy on the remote site.
> This includes that the working directory is the same (what we already
> guarantee with our tool) and that git is at the same 'state' (that
> means that we have the same history and that we checkout at the same
> branch/commit).
> My idea:
> Send the working directory with our  tool
> Initialize a Git directory on the remote side
> Send the 'objects','refs', 'HEAD' and the 'gitignore' with our tool
> 
> Is there anything else I should take care of?
> 
> Am Mi., 3. Okt. 2018 um 20:51 Uhr schrieb Stefan Beller <sbeller@google.com>:
> >
> > On Wed, Oct 3, 2018 at 5:26 AM Chris Jeschke
> > <chrisjberlin@googlemail.com> wrote:
> > >
> > > Hey git-team,
> > > I am working on a plug-in for a distributed pair programming tool. To
> > > skip the details: I was thinking about sending parts of the git folder
> > > as a zip folder with our own Bytestream instead of using the git API.
> > > Is there a common sense about what should and what shouldn't be done
> > > when working with the files inside the git folder?
> >
> > This contradicts the security model of git.
> > Locally I can do things like:
> >     git config alias.co "rm -rf ~"
> >     echo "rm -rf ~" >.git/hooks/{...}
> > and I would experience bad things, but that is ok,
> > as I configured it locally (supposedly I know what
> > I am doing); but if I have the ability to send these
> > tricks to my beloved coworkers, hilarity might ensue.
> >
> > What stuff do you need to send around?
> >
> > objects? Fine, as the receive could check they are
> > good using fsck.
> >
> > refs/ ? Sure. It may be confusing to users,
> > but I am sure you'll figure UX out.
> >
> > local config, hooks ? I would not.
> >
> > Not sure what else you'd think of sending around.
> >
> > Cheers,
> > Stefan
> 
Stephen Smith· Oct 4, 2018, 13:16 UTC · re: Chris Jeschke · lore

Re: inside the git folder

Chris -

You may want to look at "git bundle" to transfer the repository contents. Then the recipient could fetch from the bundle to get the source git history.

Just a thought.
sps
On Thursday, October 4, 2018 4:03:27 AM MST Johannes Schindelin wrote:
Show 49 quoted lines
> Hi Chris,
> 
> as mentioned by Stefan (who is a respected, active core Git contributor,
> if you need any more arguments to listen to him), it is inappropriate to
> copy the contents of the .git/ directory wholesale to another user's
> machine.
> 
> For one, it would horribly break in case the user overrode `user.email` in
> `.git/config`. That's one setting that should not be copied *anywhere*.
> And that's just one, there are *plenty* more examples. Just think of
> absolute paths referring to files that probably do not even exist on
> another machine! Like, worktrees, etc.
> 
> Of course, you could start a list of exceptions (files, config keys, etc)
> that should not be copied. But that's very fragile a solution.
> 
> So no, copying the .git/ directory is always the wrong thing to do, as
> Stefan pointed out.
> 
> I could imagine that a much better idea is to identify a *positive* list
> of things you want to copy over. The output of `git rev-parse
> --symbolic-full-name HEAD`? Sure. Maybe even the output of `git rev-parse
> --symbolic-full-name HEAD@{u}`? And then the URL of the corresponding
> remote? Sure. `.git/objects/alternates/`? Absolutely not.
> 
> It is tedious, alright, but you simply cannot copy the contents of .git/
> to another machine and expect that to work.
> 
> Ciao,
> Johannes
> 
> On Thu, 4 Oct 2018, Chris Jeschke wrote:
> > Hi Stefan,
> > 
> > thanks for your answer.
> > 
> > The Goal after sending the files is to have a copy on the remote site.
> > This includes that the working directory is the same (what we already
> > guarantee with our tool) and that git is at the same 'state' (that
> > means that we have the same history and that we checkout at the same
> > branch/commit).
> > My idea:
> > Send the working directory with our  tool
> > Initialize a Git directory on the remote side
> > Send the 'objects','refs', 'HEAD' and the 'gitignore' with our tool
> > 
> > Is there anything else I should take care of?
> > 
> > Am Mi., 3. Okt. 2018 um 20:51 Uhr schrieb Stefan Beller 
<sbeller@google.com>:
Show 35 quoted lines
> > > On Wed, Oct 3, 2018 at 5:26 AM Chris Jeschke
> > > 
> > > <chrisjberlin@googlemail.com> wrote:
> > > > Hey git-team,
> > > > I am working on a plug-in for a distributed pair programming tool. To
> > > > skip the details: I was thinking about sending parts of the git folder
> > > > as a zip folder with our own Bytestream instead of using the git API.
> > > > Is there a common sense about what should and what shouldn't be done
> > > > when working with the files inside the git folder?
> > > 
> > > This contradicts the security model of git.
> > > 
> > > Locally I can do things like:
> > >     git config alias.co "rm -rf ~"
> > >     echo "rm -rf ~" >.git/hooks/{...}
> > > 
> > > and I would experience bad things, but that is ok,
> > > as I configured it locally (supposedly I know what
> > > I am doing); but if I have the ability to send these
> > > tricks to my beloved coworkers, hilarity might ensue.
> > > 
> > > What stuff do you need to send around?
> > > 
> > > objects? Fine, as the receive could check they are
> > > good using fsck.
> > > 
> > > refs/ ? Sure. It may be confusing to users,
> > > but I am sure you'll figure UX out.
> > > 
> > > local config, hooks ? I would not.
> > > 
> > > Not sure what else you'd think of sending around.
> > > 
> > > Cheers,
> > > Stefan

← back to recent threads