Размещение приложения Git на сервере без установленного git-приложения

9

Машины A и B содержат общий репозиторий git-приложения . У них обоих установлена ​​программа git-annex, и я вручную редактирую / commit / etc что-то на обеих машинах. A & B не подключены к Интернету одновременно, поэтому их нельзя синхронизировать напрямую.

Сервер C всегда включен и подключен (и бесплатный и довольно безопасный). На нем установлен git, но у меня нет прав администратора, поэтому я не могу установить git-annex.

Мой вопрос: могу ли я использовать сервер C в качестве центрального концентратора для загрузки и извлечения обновлений git-annex как из A, так и из B, без необходимости устанавливать git-annex и все зависимости haskell ghc от C?

Я пытался использовать C со специальными пультами «directory» или «rsync» , но, похоже, он содержит только файлы, а не остальную часть того, что необходимо для обновления A и B после push / pull.

Любая подсказка будет высоко ценится!

Винсент
источник

Ответы:

6

Имея доступ к git и rsync к одному и тому же серверу, вы можете использовать этот сервер для хранения истории (через доступ git) и хранилища значений ключей приложения (через доступ rsync). Они также могут быть отделены и сохранены на любом количестве разных серверов.

Похоже, вы уже ознакомились со всеми необходимыми инструментами. По сути, вы получите 2 отдельных пульта, оба из которых будут указывать на разные местоположения на сервере-c. Первый удаленный сервер (server-c) - это обычный git remote для синхронизации вашей истории и всего, что проверяется непосредственно в git repo. Второй пульт является приложением специального пульта.

[remote "server-c"]
    url = git@example.com:/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 = ...

Вы должны быть в состоянии установить это с чем-то вроде:

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

Это должно дать вам базовую функциональность, которую вы ищете. Единственным недостатком является то, что у вас есть 2 разных удаленных имени, которые действительно указывают на один и тот же сервер. В частности, вы просто должны помнить об использовании специального удаленного (server-c-rsync) при использовании аргументов --to = или --from = для get, copy и move.

Может быть возможно указать один пульт на оба местоположения, однако я не уверен, действительно ли это поддерживается. Следующие команды появляются для создания разумного .git / config.

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

Для меня это приводит к одному удаленному в .git / config с url = (для обычных операций git) и annex-rsyncurl =. Однако я больше не проверял это, чтобы гарантировать, что git application игнорирует URL и использует только запись application-rsyncurl при работе с приложенными файлами.

Джастин гейбель
источник
Большой! Я проведу некоторое тестирование, но это должно приблизить меня к работоспособному решению. Большое спасибо за ваше время и ответ!
Винсент
Рад, что смог помочь. Я только начал использовать git annex во время каникул, и до сих пор мне это очень нравится!
Джастин Гейбель
я думаю, что последний пример должен просто работать. на самом деле, я думаю, что он будет rsync файлы на месте, даже если это просто голое
репозиторий