From: "Neal Kreitzinger" <neal@rsss.com>
To: git@vger.kernel.org
Subject: Re: repo permissions repair: restore --shared=group permissions
Date: Tue, 24 Aug 2010 22:42:54 -0500 [thread overview]
Message-ID: <i523if$86m$5@dough.gmane.org> (raw)
In-Reply-To: AANLkTik7w6rDa=dLp=cvU8JeuCn1ZjM9ateHU8m_UQkO@mail.gmail.com
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com> wrote in message
news:AANLkTik7w6rDa=dLp=cvU8JeuCn1ZjM9ateHU8m_UQkO@mail.gmail.com...
On Wed, Aug 11, 2010 at 23:24, Neal Kreitzinger <neal@rsss.com> wrote:
> chmod -R 755 was inadvertantly run on all of our git repos (bare and
> non-bare). These repos were originally created as --shared=group. When I
> run git init --shared=group it does not complain, but it also does not
> correct the permissions. Please advise on the best way restore the
> permissions to --shared=group. Thanks!
chmod -R g+rw ?
I followed your suggestion, but because I wasn't sure that would replicate
what git would have done, I ended up restoring from tape after realizing
that the rsync backups were corrupted due to the git repos being in use
during the rsync.
I then had a similar situation where I needed to lock down a central git
repository so that only the integration manager had write access. Since git
init --shared=0644 would not do it for me, this is the method I used to
ensure that git set the permissions according to its rules:
(Search Keywords: "How to change the permissions of a Git Repo")
Change Permissions on an Existing Git Repo:
Check System for Users who may be using the Repo:
# w (see who's logged in)
# ps -A |grep git-menu-scriptname (where scriptname is some unique string
in the name of the main script your users use to access that repo, if
applicable)
# skill -KILL pts/99 (where 99 = the pts/# from w command, log the user
off)
Change Shared=group to Shared=0644 (change group read+write to group read
only):
Create Template for permissions:
login as fsngit0
$ cd /path/to/template
$ cat config
[core]
sharedRepository = 0644
Clone repo to set permissions via git:
$ cd /path/to/repo-parent-dir
$ git clone --bare --template=/path/to/template REPO.git REPOMOD.git
Compare old and new versions:
$ diff -r REPO.git REPOMOD.git
Only in REPO.git: branches (empty, keep the old version)
diff -r REPO.git/config REPOMOD.git/config (merge the old and new together)
1a2
> sharedrepository = 0644
6,7c7
< denyDeletes = true
< denyNonFastForwards = true
---
> denyNonFastforwards = true
Only in REPO.git: description (keep the old version)
Only in REPO.git: gitk.cache (gitk will recreate this)
Only in REPO.git: hooks (contains sample scripts only or whatever scripts
your using, keep the old version)
Only in REPO.git: info (keep the old version: contains attributes, exclude,
or whatever you've setup)
diff -r REPO.git/packed-refs REPOMOD.git/packed-refs (keep the new version
because fresh clone has been optimized)
2c2
< Xa8b7b8c8fd3920b89770f2e8356f4ecb71a58cX refs/heads/master
---
> Ya69744e46276a37932d5f0755a53f76cdf83e0dY refs/heads/master
Only in REPO.git/refs/heads: master (old version not needed because fresh
clone has been optimized)
Copy over REPO.git files that the clone didn't replicate, but that you need
in order to retain all settings:
$ cd /path/to/REPOMOD.git
$ cp -rv /path/to/REPO.git/info .
repeat as needed...
change permissions to g-w or whatever your core.sharedRepository new value
is supposed to be:
$ chmod -R g-w info
repeat as needed...
Validate your changes:
$ diff -r REPO.git REPOMOD.git
diff -r REPO.git/config REPOMOD.git/config
1a2
> sharedrepository = 0644
7c8
< denyNonFastForwards = true
---
> denyNonFastforwards = true
Only in REPO.git: gitk.cache
diff -r REPO.git/packed-refs REPOMOD.git/packed-refs
2c2
< Xa8b7b8c8fd3920b89770f2e8356f4ecb71a58cX refs/heads/master
---
> Y69744e46276a37932d5f0755a53f76cdf83e0dY refs/heads/master
Only in REPO.git/refs/heads: master
Backup REPO.git and rename REPOMOD.git to REPO.git:
$ cp -rvp REPO.git REPO.git-old
$ diff -r REPO.git REPO.git-old
$ rm -rf REPO.git
$ cp -rvp REPOMOD.git REPO.git
$ diff -r REPO.git REPOMOD.git
$ diff -r REPO.git REPO.git-old
prev parent reply other threads:[~2010-08-25 3:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-11 23:24 repo permissions repair: restore --shared=group permissions Neal Kreitzinger
2010-08-11 23:55 ` Ævar Arnfjörð Bjarmason
2010-08-25 3:42 ` Neal Kreitzinger [this message]
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='i523if$86m$5@dough.gmane.org' \
--to=neal@rsss.com \
--cc=git@vger.kernel.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 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).