Hostowanie Aneksu Git na serwerze bez zainstalowanego Aneksu Git

9

Komputery A i B hostują wspólne repozytorium aneksu git . Oba mają zainstalowany program git-annex , a ja ręcznie edytuję / zatwierdzam / etc rzeczy na obu komputerach. A i B nie są jednocześnie podłączone do Internetu, więc nie można ich zsynchronizować bezpośrednio.

Serwer C jest zawsze włączony i podłączony (oraz bezpłatny i dość bezpieczny). Ma zainstalowany git, ale nie mam uprawnień administratora, więc nie mogę zainstalować git-annex.

Moje pytanie: czy mogę użyć serwera C jako centralnego koncentratora do wypychania i pobierania aktualizacji git-annex zarówno z A, jak i B, bez konieczności instalowania git-annex i całej zależności ghc haskell na C?

Próbowałem używać C ze specjalnymi pilotami „katalog” lub „rsync” , ale wydaje się, że zawiera ono tylko pliki, a nie resztę tego, co jest potrzebne do aktualizacji A i B po push / pull.

Wszelkie wskazówki byłyby mile widziane!

Vincent
źródło

Odpowiedzi:

6

Dzięki dostępowi git i rsync do tego samego serwera możesz używać tego serwera do przechowywania zarówno historii (poprzez dostęp git), jak i aneksu do przechowywania kluczy i wartości (poprzez dostęp rsync). Można je również oddzielić i przechowywać na dowolnej liczbie różnych serwerów.

Wygląda na to, że przeczytałeś już o wszystkich potrzebnych narzędziach. Zasadniczo otrzymasz 2 osobne piloty, oba wskazujące różne lokalizacje na serwerze-c. Pierwszy pilot (serwer-c) to zwykły pilot git do synchronizacji historii i wszystkiego, co jest sprawdzane bezpośrednio w repozytorium git. Drugi pilot to specjalny pilot zdalnego sterowania.

[remote "server-c"]
    url = [email protected]:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
    annex-rsyncurl = example.com:/home/user/annex-rsync
    annex-uuid = ...

Powinieneś być w stanie skonfigurować to w następujący sposób:

git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none

To powinno zapewnić ci podstawową funkcjonalność, której szukasz. Jedynym minusem jest to, że masz 2 różne nazwy zdalne, które naprawdę wskazują na ten sam serwer. W szczególności musisz pamiętać o użyciu specjalnego pilota (server-c-rsync), gdy używasz argumentów --to = lub --from = get, copy i move.

Może być możliwe skierowanie jednego pilota w obie lokalizacje, jednak nie jestem pewien, czy jest to obsługiwane. Następujące polecenia wydają się tworzyć sensowne .git / config.

git init
git annex init "test"
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none

Dla mnie skutkuje to pojedynczym zdalnym w .git / config z zarówno url = (dla normalnych operacji git), jak i aneksu-rsyncurl =. Jednak nie testowałem tego dalej, aby upewnić się, że załącznik git ignoruje adres URL i używa tylko wpisu Annex-rsyncurl podczas pracy z załączonymi plikami.

Justin Geibel
źródło
Świetny! Zrobię kilka testów, ale to powinno zbliżyć mnie do praktycznego rozwiązania. Wielkie dzięki za poświęcony czas i odpowiedź!
Vincent
Cieszę się, że mogłem pomóc. Właśnie zacząłem korzystać z aneksu git podczas przerwy wakacyjnej i jak dotąd jestem z tego bardzo zadowolony!
Justin Geibel
myślę, że ostatni przykład powinien po prostu zadziałać. w rzeczywistości myślę, że to rsync pliki w miejscu, nawet jeśli jest to zwykłe repozytorium git ...
anarcat