documentation updates for new receive.denyCurrentBranch=updateInstead support
This commit was sponsored by andrea rota.
This commit is contained in:
parent
e6857e75a6
commit
a700fdf5cf
9 changed files with 59 additions and 45 deletions
|
@ -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/>
|
||||||
|
"""]]
|
|
@ -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.
|
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`
|
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!
|
||||||
"""]]
|
"""]]
|
||||||
|
|
|
@ -6,5 +6,7 @@
|
||||||
content="""
|
content="""
|
||||||
Sure you can.. That's how <http://downloads.kitenet.net/> works, which is where people download git-annex builds from!
|
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]]
|
[[tips/setup_a_public_repository_on_a_web_site]]
|
||||||
"""]]
|
"""]]
|
||||||
|
|
|
@ -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.
|
||||||
|
"""]]
|
|
@ -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
|
that is done by the sync command, but without pushing or pulling any
|
||||||
data.
|
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
|
# SEE ALSO
|
||||||
|
|
||||||
[[git-annex]](1)
|
[[git-annex]](1)
|
||||||
|
|
|
@ -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.
|
|
@ -12,44 +12,19 @@ Here's how I set it up. --[[Joey]]
|
||||||
3. `git init; git annex init`
|
3. `git init; git annex init`
|
||||||
4. `git config core.sharedrepository world` (Makes sure files
|
4. `git config core.sharedrepository world` (Makes sure files
|
||||||
are always added with permissions that allow everyone to read them.)
|
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
|
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
|
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
|
git `post-update` hook will take care of this, you just need to enable
|
||||||
the hook. `chmod +x .git/hooks/post-update`
|
the hook. `chmod +x .git/hooks/post-update`
|
||||||
6. `git annex add; git commit -m added`
|
7. `git annex add; git commit -m added`
|
||||||
7. Make sure users can still download files from the site directly.
|
8. 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/"
|
9. Instruct advanced users to clone a http url that ends with the "/.git/"
|
||||||
directory. For example, for downloads.kitenet.net, the clone url
|
directory. For example, for downloads.kitenet.net, the clone url
|
||||||
is `https://downloads.kitenet.net/.git/`
|
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
|
When users clone over http, and run git-annex, it will
|
||||||
automatically learn all about your repository and be able to download files
|
automatically learn all about your repository and be able to download files
|
||||||
right out of it, also using http.
|
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>
|
|
||||||
|
|
|
@ -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.
|
|
||||||
"""]]
|
|
|
@ -71,3 +71,5 @@ Keeping this a command-line setup, and not something the assistant does,
|
||||||
will avoid that confusion.
|
will avoid that confusion.
|
||||||
|
|
||||||
--[[Joey]]
|
--[[Joey]]
|
||||||
|
|
||||||
|
> all above [[done]] --[[Joey]]
|
||||||
|
|
Loading…
Add table
Reference in a new issue