git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git for local web development
@ 2009-04-16 23:04 William DiNoia
  2009-04-17 11:59 ` Jeff King
  0 siblings, 1 reply; 7+ messages in thread
From: William DiNoia @ 2009-04-16 23:04 UTC (permalink / raw)
  To: git

Hello,

I am having a bit of trouble trying to setup git for web development. I would like to have a git repository in /var/www/sites which I can clone and work on from my ~/Desktop. Working from the desktop clone, I would like to be able to git-push and have the work tree updated. It seems this is a common request as it is in the FAQ, Why won't I see changes in the remote repo after "git push"?

This is what I've done...

as www-data from /var/www/sites/

$mkdir test.com
$cd test.com
$git-init
$git-config core.worktree /var/www/sites/test.com
$vim .git/hooks/post-receive
 #!/bin/sh
 git-checkout -f
$chmod +x .git/hooks/post-receive

Then as william from /home/william/Desktop/

$git-clone /var/www/sites/test.com
$cd test.com
$vim index.html
 testing, testing, 1,2
$git-add index.html
$git-commit
$git-push origin master

Something like the following is returned, and the work tree at /var/www/sites/test.com is not updated

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /var/www/sites/test.com/.git
   9b490a2..5e5cc63  master -> master
error: unable to unlink old 'index.html' (Permission denied)
error: hooks/post-receive exited with error code 1

The interesting part is that if I change to /var/www/sites/test.com and run "git-checkout -f" it updates the work tree...
Should I be using a different hook? 
Is there something wrong with the script?
Is there a better, more elegant way to achieve updating of the work tree? 

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

* git for local web development
@ 2009-04-17  0:56 William DiNoia
  0 siblings, 0 replies; 7+ messages in thread
From: William DiNoia @ 2009-04-17  0:56 UTC (permalink / raw)
  To: git

Hello,

I am having a bit of trouble trying to setup git for web development.
I would like to have a git repository in /var/www/sites which I can clone and
work on from my ~/Desktop. Working from the desktop clone, I would like to be
able to git-push and have the work tree updated. It seems this is a common
request as it is in the FAQ entitled, Why won't I see changes in the remote
repo after "git push"?

This is what I've done...

as www-data from /var/www/sites/

$mkdir test.com
$cd test.com
$git-init
$git-config core.worktree /var/www/sites/test.com
$vim .git/hooks/post-receive
#!/bin/sh
git-checkout -f
$chmod +x .git/hooks/post-receive

Then as william from /home/william/Desktop/

$git-clone /var/www/sites/test.com
$cd test.com
$vim index.html
testing, testing, 1,2
$git-add index.html
$git-commit
$git-push origin master

Something like the following is returned, and the work tree at
/var/www/sites/test.com is not updated

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /var/www/sites/test.com/.git
   9b490a2..5e5cc63  master -> master
error: unable to unlink old 'index.html' (Permission denied)
error: hooks/post-receive exited with error code 1

The interesting part is that if I change to /var/www/sites/test.com and run
"git-checkout -f" it updates the work tree...
Should I be using a different hook? 

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

* Re: git for local web development
  2009-04-16 23:04 git for local web development William DiNoia
@ 2009-04-17 11:59 ` Jeff King
  2009-04-17 15:44   ` William DiNoia
  0 siblings, 1 reply; 7+ messages in thread
From: Jeff King @ 2009-04-17 11:59 UTC (permalink / raw)
  To: William DiNoia; +Cc: git

On Thu, Apr 16, 2009 at 07:04:10PM -0400, William DiNoia wrote:

> I would like to be able to git-push and have the work tree updated.
>
> [...]
>
> $vim .git/hooks/post-receive
>  #!/bin/sh
>  git-checkout -f
> $chmod +x .git/hooks/post-receive
>
> [...]
>
> Counting objects: 5, done.
> Compressing objects: 100% (2/2), done.
> Writing objects: 100% (3/3), 277 bytes, done.
> Total 3 (delta 1), reused 0 (delta 0)
> Unpacking objects: 100% (3/3), done.
> To /var/www/sites/test.com/.git
>    9b490a2..5e5cc63  master -> master
> error: unable to unlink old 'index.html' (Permission denied)
> error: hooks/post-receive exited with error code 1

Well, your post-receive hook is running, and checkout is barfing with a
permission denied error. Probably the repo directory is owned by
www-data, and you are pushing as user "william"? What are the directory
permissions like?

-Peff

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

* Re: git for local web development
  2009-04-17 11:59 ` Jeff King
@ 2009-04-17 15:44   ` William DiNoia
  2009-04-17 18:30     ` Jeff King
  0 siblings, 1 reply; 7+ messages in thread
From: William DiNoia @ 2009-04-17 15:44 UTC (permalink / raw)
  To: git

Jeff King <peff <at> peff.net> writes:

> 
> On Thu, Apr 16, 2009 at 07:04:10PM -0400, William DiNoia wrote:
> 
> > I would like to be able to git-push and have the work tree updated.
> >
> > [...]
> >
> > $vim .git/hooks/post-receive
> >  #!/bin/sh
> >  git-checkout -f
> > $chmod +x .git/hooks/post-receive
> >
> > [...]
> >
> > Counting objects: 5, done.
> > Compressing objects: 100% (2/2), done.
> > Writing objects: 100% (3/3), 277 bytes, done.
> > Total 3 (delta 1), reused 0 (delta 0)
> > Unpacking objects: 100% (3/3), done.
> > To /var/www/sites/test.com/.git
> >    9b490a2..5e5cc63  master -> master
> > error: unable to unlink old 'index.html' (Permission denied)
> > error: hooks/post-receive exited with error code 1
> 
> Well, your post-receive hook is running, and checkout is barfing with a
> permission denied error. Probably the repo directory is owned by
> www-data, and you are pushing as user "william"? What are the directory
> permissions like?
> 
> -Peff

I have since switched to using the post-update hook which now looks like:

git-checkout -f
exec git-update-server-info

However upon git-push from /home/william/Desktop I receive the following:

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /var/www/sites/test.com/.git
   e337c9b..581228f  master -> master
error: unable to unlink old 'index.html' (Permission denied)

The repo is owned by "www-data" and I am pushing as user "william". "william"
is in the "www-data" group. I also ran

git-config core.sharedrepository group

as "www-data", but no change...

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

* Re: git for local web development
  2009-04-17 15:44   ` William DiNoia
@ 2009-04-17 18:30     ` Jeff King
  2009-04-17 18:48       ` Martin Langhoff
  2009-04-17 22:00       ` William DiNoia
  0 siblings, 2 replies; 7+ messages in thread
From: Jeff King @ 2009-04-17 18:30 UTC (permalink / raw)
  To: William DiNoia; +Cc: git

On Fri, Apr 17, 2009 at 03:44:43PM +0000, William DiNoia wrote:

> I have since switched to using the post-update hook which now looks like:
> 
> git-checkout -f
> exec git-update-server-info

That will ignore any error code from git-checkout; you probably want

  git checkout -f && git update-server-info

> However upon git-push from /home/william/Desktop I receive the following:
> 
> Counting objects: 5, done.
> Compressing objects: 100% (2/2), done.
> Writing objects: 100% (3/3), 281 bytes, done.
> Total 3 (delta 1), reused 0 (delta 0)
> Unpacking objects: 100% (3/3), done.
> To /var/www/sites/test.com/.git
>    e337c9b..581228f  master -> master
> error: unable to unlink old 'index.html' (Permission denied)

So this is the same error as before, because it is coming from the
"git-checkout -f" invocation.

> The repo is owned by "www-data" and I am pushing as user "william". "william"
> is in the "www-data" group. I also ran
> 
> git-config core.sharedrepository group
> 
> as "www-data", but no change...

The error is in the permissions of the working tree that already exists.
core.sharedrepository is about the settings that git uses for files within
$GIT_DIR. The working tree files that already exist are not changed.

I suspect if you "ls -ld /var/www/sites/test.com" you will see that it
does not have group write permissions.  If that is the case, it is
probably simplest to just add group write permissions to the whole
tree:

  find /var/www/sites/test.com -name .git -prune -o -print0 |
    xargs -0 chmod g+w

I don't recall offhand whether newly created files in the working tree
will have the group and permissions set according to
core.sharedrepository (I think sharedrepository is usually about users
sharing a common repo for pushing into).

If you are just going to push as "william", is there a reason that the
repo and working tree are not owned by "william"? As long as www-data,
presumably the webserver could still serve it.

-Peff

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

* Re: git for local web development
  2009-04-17 18:30     ` Jeff King
@ 2009-04-17 18:48       ` Martin Langhoff
  2009-04-17 22:00       ` William DiNoia
  1 sibling, 0 replies; 7+ messages in thread
From: Martin Langhoff @ 2009-04-17 18:48 UTC (permalink / raw)
  To: Jeff King; +Cc: William DiNoia, git

On Fri, Apr 17, 2009 at 8:30 PM, Jeff King <peff@peff.net> wrote:
> repo and working tree are not owned by "william"? As long as www-data,
> presumably the webserver could still serve it.

Also, as long as they are owned by www-data, the setup is more
vulnerable to security problems.

Files served by Apache (or any other webserver) should _not_ be owned
by the same user that the webserver runs under. The www-data ownership
is exclusively for files that you expect the webserver to be able to
_modify_: files uploaded by users, session data files, sqlite
databases and such.

You don't really want your webserver changing executable files such as PHP.

It is a valid thing to create a user to own those files, and in
servers where a team was maintaining the code, we have often used
'www-code'.

cheers,



m
-- 
 martin.langhoff@gmail.com
 martin@laptop.org -- School Server Architect
 - ask interesting questions
 - don't get distracted with shiny stuff  - working code first
 - http://wiki.laptop.org/go/User:Martinlanghoff

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

* Re: git for local web development
  2009-04-17 18:30     ` Jeff King
  2009-04-17 18:48       ` Martin Langhoff
@ 2009-04-17 22:00       ` William DiNoia
  1 sibling, 0 replies; 7+ messages in thread
From: William DiNoia @ 2009-04-17 22:00 UTC (permalink / raw)
  To: git

Jeff King <peff <at> peff.net> writes:

> If you are just going to push as "william", is there a reason that the
> repo and working tree are not owned by "william"? As long as www-data,
> presumably the webserver could still serve it.
> 
> -Peff
> 

Solved...

I took your advice and changed the owner of /var/www/var/sites to "william".
It pushes and the post-update hook checks out the pushed files to adjacent work
tree. I was mistakenly under the impression that Apache could only read files
owned by "www-data".

Thank you for your help,
William

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

end of thread, other threads:[~2009-04-17 22:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-16 23:04 git for local web development William DiNoia
2009-04-17 11:59 ` Jeff King
2009-04-17 15:44   ` William DiNoia
2009-04-17 18:30     ` Jeff King
2009-04-17 18:48       ` Martin Langhoff
2009-04-17 22:00       ` William DiNoia
  -- strict thread matches above, loose matches on Subject: below --
2009-04-17  0:56 William DiNoia

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