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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
This tutorial shows how to set up a centralized git repository
hosted on your own git server, which can be any unix system with
ssh and git and git-annex installed. A VPS, a home server, etc.
This sets up a very simple git server. More complex setups are possible.
See for example [[using_gitolite_with_git-annex]].
## set up the server
On the server, you'll want to [[install]] git, and git-annex, if you haven't
already. If possible, install it using your distribution's package manager:
server# sudo apt-get install git git-annex
Note that git-annex-shell needs to be located somewhere in the PATH, so
that a client can successfully run "ssh yourserver git-annex-shell".
Installing git-annex using a package manager will take care of this for
you. But if you're not root or otherwise can't install git-annex that way,
you may need to do more work; see [[get_git-annex-shell_into_PATH]].
Decide where to put the repository on the server, and create a bare git repo
there. In your home directory is a simple choice:
server# cd
server# git init annex.git --bare --shared
That's the server setup done!
## make a checkout
Now on your laptop, clone the git repository from the server:
laptop# git clone ssh://example.com/~/annex.git
Cloning into 'annex'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
Tell git-annex to use the repository, and describe where this clone is
located:
laptop# cd annex
laptop# git annex init 'my laptop'
init my laptop ok
## add files to the repository
Add some files, obtained however.
# git annex add *.mp4
add Haskell_Amuse_Bouche-b9OVqxmI.mp4 (checksum) ok
(Recording state in git...)
# git commit -m "added a video. I have not watched it yet but it sounds interesting"
Feel free to rename the files, etc, using normal git commands:
# git mv Haskell_Amuse_Bouche-b9OVqxmI.mp4 Haskell_Amuse_Bouche.mp4
# git commit -m 'better filenames'
Now push your changes back to the central repository on your server. As
well as pushing the master branch, remember to push the git-annex branch,
which is used to track the file contents.
# git push origin master git-annex
To git@github.com:joeyh/techtalks.git
* [new branch] master -> master
* [new branch] git-annex -> git-annex
That push went fast, because it didn't upload large videos to the server.
So, to finish up, tell git-annex to sync all the data in the repository
to your server:
# git annex sync --content
...
## make more checkouts
So far you have a central repository on your server, and a checkout on a laptop.
Let's make another checkout elsewhere. Clone the central repository as before.
elsewhere# git clone ssh://example.com/~/annex.git
elsewhere# cd annex
Notice that your clone does not have the contents of any of the files yet.
If you run `ls`, you'll see broken symlinks. It's easy to download them from
your server either by running `git annex sync --content`, or by asking
git-annex to download individual files:
# git annex get Haskell_Amuse_Bouche.mp4
get Haskell_Amuse_Bouche.mp4 (from origin...)
12877824 2% 255.11kB/s 00:00
ok
|