git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: How to set up a shared repository

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 21, 2005, 21:36 UTC
Message-ID
<Pine.LNX.4.63.0512212222430.18118@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<7vy82e5ftx.fsf@assigned-by-dhcp.cox.net>
Hi,
On Wed, 21 Dec 2005, Junio C Hamano wrote:
Show 15 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > A. Setting up the umask
> >
> > 1. Separate repository box
> >
> > If you are lucky enough that you can afford a separate machine for the 
> > shared repository: Good. Just make sure that the umask is set group 
> > friendly, either by ensuring that (assuming the login shell is bash) 
> > $HOME/.bash_profile contains the line
> >
> > 	umask 0002
> 
> I suspect a bash started from ssh noninteractive session does
> not read .bash_profile --- you may want to check.

Yes, you're right. But after all, this section was meant to put a little pressure on you to agree to core.umask ;-)

Show 5 quoted lines
> > 2. Some server accessible by ssh
> >
> > 	git-repo-config core.umask 0002
> 
> Not yet ;-)
Well, it is a reality here ;-)
Show 14 quoted lines
> > B. Making sure the index is not corrupted by a push
> >
> > 1. No checkout!
> >
> > You can use the shared repository just like you use CVS: no working 
> > directory. To disallow a checkout, just do
> >
> > 	touch .git/index
> > 	chmod a-rwx .git/index
> >
> > Every attempt to modify the index (which is invalid), will now result in 
> > an error.
> 
> Arrrgh....what a hack.  But it is a good hack.

It is the simplest way to achieve the goal (at least that I could think of). Thanks for the compliment!

Show 5 quoted lines
> > 2. Ensure index and working directory consistency (no locking)
> >
> > If you want to be able to work on the project in the shared repository, 
> 
> I am very tempted to end this sentence with "please don't" ;-).
You are very welcome to do so!

Of course, the use case is git itself. I host a private version with all the goodies I like so much, and which you unfortunately do not like as much.

It is a phantastic way to keep git up to date without having to login manually. It is also a phantastic way to break the setup spectacularly when something goes wrong.

Show 7 quoted lines
> > create hooks, as follows:
> 
> Your update hook looks sane if too strict.  I do not think of
> any reason to push and fast forward a branch that is not pointed
> at by .git/HEAD.  Not that I encourage pushing into a non-naked
> repository where an uncontrolled random development happens,
> though.
Is it too strict?

: #!/bin/sh : : # if the working directory contains modifications, do not allow : # push

This checks if the ref being pushed is the current HEAD:

: HEAD=$(git-symbolic-ref HEAD) : case "$1" in : $HEAD)

Only if it is, this check occurs

: unset GIT_DIR : cd .. && test -z "$(git-diff-index --name-only HEAD)";; : esac

IMHO this does exactly the right thing: Fail only if the ref to push is the current HEAD *and* something is not committed.

Show 6 quoted lines
> > Note that I did not check if a push locks another push.
> 
> Although it does protect against stomping on each other by
> read/do-work/re-read-and-swap cycle, push does not lock. If you
> want to run a build from the post-update hook you need to
> serialize the build yourself.

Yes, I feared that much. Also note that in my dangerous setup, something could go awfully wrong because post-update is currently compiling git itself, while somebody else wants to use it.

So, more and more I think about it, I should not do it then. But for a few days, I am the only user!

Thanks, Dscho

Previous: Junio C Hamano
Message 3 of 3 in “How to set up a shared repository”
  1. Johannes SchindelinDec 21, 2005
  2. Junio C HamanoDec 21, 2005
  3. Johannes SchindelinDec 21, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.