summaryrefslogtreecommitdiff
path: root/doc/bare_repositories.mdwn
blob: f73f2f845ac7ac67af361387d7e8442572ae5179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Due to popular demand, git-annex can now be used with bare repositories.

So, for example, you can stash a file away in the origin:
`git annex move mybigfile --to origin`

Of course, for that to work, the bare repository has to be on a system with
[[git-annex-shell]] installed. If "origin" is on GitWeb, you still can't
use git-annex to store stuff there.

It took a while, but bare repositories are now supported exactly as well
as non-bare repositories. Except for these caveats:

* `git annex fsck` works in a bare repository, but does not display
  warnings about insufficient
  [[copies]]. To get those warnings, just run it in one of the non-bare
  checkouts.
* `git annex unused` in a bare repository only knows about keys used in
  branches that have been pushed to the bare repository. So use it with care..
* Commands that need a work tree, like `git annex add` won't work in a bare
  repository, of course.
* However, you can run commands like `git annex copy`, `git annex get`, and
  `git annex drop` in a bare repository. In a bare repository, these
  behave as if the `--all` option were used, and so operate
  on every single version of every single file that is present in the git
  repository history. The `--branch` option can be used to make these
  commands only operate on the files referenced by a specified branch.  
  For example: `git annex get --branch master`

***

Here is a quick example of how to set this up, using `origin` as the remote name, and assuming `~/annex` contains an annex:

On the server:

    git init --bare bare-annex.git
    cd bare-annex.git && git annex init origin

Now configure the remote and do the initial push:

    cd ~/annex
    git remote add origin example.com:bare-annex.git
    git push origin master git-annex

Now `git annex info` should show the configured bare remote. If it does
not, you may have to pull from the remote first (older versions of
`git-annex`).

If you wish to configure git such that you can push/pull without arguments,
set the upstream branch:

    git branch master --set-upstream origin/master