documentation updates for new receive.denyCurrentBranch=updateInstead support

This commit was sponsored by andrea rota.
This commit is contained in:
Joey Hess 2017-02-17 15:43:16 -04:00
parent e6857e75a6
commit a700fdf5cf
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
9 changed files with 59 additions and 45 deletions

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="joey"
subject="""comment 4"""
date="2017-02-17T19:34:55Z"
content="""
An easier way to set this up is available now, see
<https://git-annex.branchable.com/tips/making_a_remote_repo_update_when_changes_are_pushed_to_it/>
"""]]

View file

@ -7,4 +7,8 @@
This is not something the assistant really handles yet. The issue is that if you have a non-bare repository on the USB drive, something has to run `git annex sync` in it when changes are pushed to it, to update it to display the files that are in the repository.
One way to do this is to set up a non-bare repository by hand and add a git post-receive hook that runs `git annex sync`
Update: Another way, recently added is
<https://git-annex.branchable.com/making_a_remote_repo_update_when_changes_are_pushed_to_it/>
This new approach even supports FAT filesystems!
"""]]

View file

@ -6,5 +6,7 @@
content="""
Sure you can.. That's how <http://downloads.kitenet.net/> works, which is where people download git-annex builds from!
[[tips/making_a_remote_repo_update_when_changes_are_pushed_to_it]]
[[tips/setup_a_public_repository_on_a_web_site]]
"""]]

View file

@ -0,0 +1,13 @@
[[!comment format=mdwn
username="joey"
subject="""comment 4"""
date="2017-02-17T19:38:45Z"
content="""
It's now pretty easy to set up a remote on a USB drive so that `git annex
sync` will update the work tree. See
<https://git-annex.branchable.com/tips/making_a_remote_repo_update_when_changes_are_pushed_to_it/>
However, the assistant does not do this by default when adding repos on USB
drives, due to the likely confusion that setting up such a repo would
cause, as described in my previous comment.
"""]]

View file

@ -12,10 +12,6 @@ This performs the same merging (and merge conflict resolution)
that is done by the sync command, but without pushing or pulling any
data.
One way to use this is to put `git annex merge` into a repository's
post-receive hook. Then any syncs to the repository will update its
working copy automatically.
# SEE ALSO
[[git-annex]](1)

View file

@ -0,0 +1,24 @@
Normally, pushing a change into a remote git repository does not update its
working tree. But it can be very convenient to only need to `git push`
(or `git annex sync --content`) to a remote to update the files checked out
there.
Git has a way to let you do this, by setting `receive.denyCurrentBranch`
to `updateInstead` in the remote repository. For example:
ssh remote
cd /path/to/repo
git config receive.denyCurrentBranch updateInstead
Now after a push to the remote, its working tree will be updated.
Changes in the remote's working tree can prevent this update from working;
normally you'll want to avoid manually changing the remote's working tree,
and only push changes into it in this configuration.
When the remote is using [[direct_mode]] or
[[adjusted_branches|git-annex-adjust]], you need the git-annex post-receive
hook to be set up for pushes to update the remote's working tree.
This is a new feature in git-annex 6.20170217. If the remote was
initialized with an older version of git-annex, you will need to re-run
`git annex init` in the remote after upgrading git-annex.

View file

@ -12,44 +12,19 @@ Here's how I set it up. --[[Joey]]
3. `git init; git annex init`
4. `git config core.sharedrepository world` (Makes sure files
are always added with permissions that allow everyone to read them.)
5. We want users to be able to clone the git repository over http, because
5. `git config receive.denyCurrentBranch updateInstead` (Makes the
[[working tree update when changes are pushed to it|making_a_remote_repo_update_when_changes_are_pushed_to_it]].)
6. We want users to be able to clone the git repository over http, because
git-annex can download files from it over http as well. For this to
work, `git update-server-info` needs to get run after commits. The
git `post-update` hook will take care of this, you just need to enable
the hook. `chmod +x .git/hooks/post-update`
6. `git annex add; git commit -m added`
7. Make sure users can still download files from the site directly.
8. Instruct advanced users to clone a http url that ends with the "/.git/"
7. `git annex add; git commit -m added`
8. Make sure users can still download files from the site directly.
9. Instruct advanced users to clone a http url that ends with the "/.git/"
directory. For example, for downloads.kitenet.net, the clone url
is `https://downloads.kitenet.net/.git/`
9. Set up a git `post-receive` hook to update the repository's working tree
when changes are pushed to it. See below for details.
When users clone over http, and run git-annex, it will
automatically learn all about your repository and be able to download files
right out of it, also using http.
## post-receive hook
If you have git-annex 4.20130703, the post-receive hook mentioned above
in step 9 just needs to run `git annex merge`.
With older versions of git-annex, you can instead use `git annex sync`.
There are two gotchas with some versions of git to be aware of when writing
this post-receive hook.
1. The hook may be run with the current directory set to the `.git`
directory, and not the top of your work tree. So you need to `cd ..` or
similar in the hook.
2. `GIT_DIR` may be set to `.`, which will not be right after changing
directory. So you will probably want to unset it.
Here's a post-receive hook that takes these problems into account:
<pre>
#!/bin/sh
unset GIT_DIR
cd ..
git annex merge
</pre>

View file

@ -1,10 +0,0 @@
[[!comment format=mdwn
username="wsha.code+ga@b38779424f41c5701bbe5937340be43ff1474b2d"
nickname="wsha.code+ga"
subject="post-receive hook"
date="2015-10-09T17:41:51Z"
content="""
The post is pretty clear but I misinterpreted at first and got stuck for a while, so just in case this helps anyone else:
The issues about the `post-receive` hook running in the `.git` directory and `GIT_DIR` being set to `.` are distinct issues and you might need to fix both them. At first, I thought they were the same thing and just doing `cd ..` would be enough to fix things, but it is not.
"""]]

View file

@ -71,3 +71,5 @@ Keeping this a command-line setup, and not something the assistant does,
will avoid that confusion.
--[[Joey]]
> all above [[done]] --[[Joey]]