Может ли NAS служить единым локальным репозиторием GitHub для нескольких хостов?

У меня есть несколько репозиториев на GitHub. До сих пор я использовал одну машину (Mac) для размещения локальной версии этих репозиториев; то есть они находятся в папке /Users/seamus/Documents/GitHub на Macintosh HD для этого Mac. В каждом репо есть подпапка. Простота и простота обслуживания для одного пользователя и одной машины.

Но я немного «разветвляюсь»… Теперь у меня есть 3 компьютера Mac, рабочий стол Ubuntu, несколько Raspberry Pi, и я работаю над проектами, которые тесно связаны с конкретной машиной. Например, я настроил IDE для своего контроллера RPi Pico ucontroller на коробке Ubuntu, тогда как мои проекты, связанные с Mac, находятся на одном из моих компьютеров Mac — какой из них зависит от того, является ли проект «винтажным» или «текущим». И это может быть важно: я единственный "местный человек", работающий над этими репозиториями - "команды" нет.

Таким образом, стало неудобно иметь локальное репо, расположенное на Mac HD одного из моих компьютеров Mac. Потенциальным решением было бы переместить мой локальный репозиторий на базе Mac HD на мой NAS-диск — устройство Synology. Я могу установить общий ресурс на Synology со всех своих машин, и (мне кажется) это решит мою насущную проблему, позволив мне работать с любым из моих репозиториев с любой из моих машин.

AFAICT, локальный репозиторий, размещенный на NAS, должен нормально работать в моей текущей ситуации (1 пользователь, несколько репозиториев). Но я не разбираюсь в git, поэтому я хотел спросить, есть ли какие-либо очевидные проблемы с этой настройкой или есть ли лучший способ достичь моей цели?

Это не имеет никакого отношения к GitHub, не так ли?

mkrieger1 18.11.2022 12:26

@mkrieger1: Мне это определенно подходит.

user5395338 18.11.2022 21:26

Я имел в виду: если бы вы разместили свои репозитории не на GitHub (скажем, GitLab или Bitbucket), ваш вопрос был бы таким же.

mkrieger1 18.11.2022 22:43

Я тоже сейчас немного в замешательстве. Используете ли вы GitHub в качестве хоста для своих репозиториев (т. е. у вас есть учетная запись GitHub и вы можете видеть свои репозитории на github.com/your_username), или вы используете только клиентское программное обеспечение GitHub для управления локальными репозиториями на вашем жесткий диск? Если вы на самом деле используете GitHub в качестве хоста, зачем вам размещать все на локальном NAS в дополнение к GitHub?

Thomas 20.11.2022 09:58
[JS за 1 час] - 9. Асинхронный
[JS за 1 час] - 9. Асинхронный
JavaScript является однопоточным, то есть он может обрабатывать только одну задачу за раз. Для обработки длительных задач, таких как сетевые запросы,...
Топ-10 компаний-разработчиков PHP
Топ-10 компаний-разработчиков PHP
Если вы ищете надежных разработчиков PHP рядом с вами, вот список лучших компаний по разработке PHP.
Скраппинг поиска Apple App Store с помощью Python
Скраппинг поиска Apple App Store с помощью Python
📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что...
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
Подъем в javascript
Подъем в javascript
Hoisting - это поведение в JavaScript, при котором переменные и объявления функций автоматически "перемещаются" в верхнюю часть соответствующих...
Улучшение генерации файлов Angular
Улучшение генерации файлов Angular
Angular - это фреймворк. Вы можете создать практически любое приложение без использования сторонних библиотек.
0
4
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Да, это возможно, если использовать git по назначению, и даже довольно просто.

Вам просто нужно убедиться, что репозитории на NAS инициализированы как голые репозитории. Голый репозиторий — это, по сути, содержимое каталога .git, содержащего всю историю вашего проекта, но без какой-либо проверенной рабочей копии. Это то, что позволяет вам подтолкнуть к этому.

Например:

# Assuming your NAS is mounted on /mnt/nas
$ cd /mnt/nas

# Initialize bare repository in /mnt/nas/some_project
$ git init --bare some_project

# Assuming your working copy lives in ~/some_project
$ cd ~/some_project

# Add the NAS repo as a remote, and push all branches to it
$ git remote add origin /mnt/nas/some_project
$ git push --all

Если у вас есть доступ по ssh к вашему NAS, вы можете даже пропустить шаг подключения и использовать username@hostname:/path/on/nas/some_project в качестве удаленного. Но вы не можете git init это таким образом.

«Голый репозиторий»… Я надеялся использовать GitHub Desktop со своих компьютеров Mac — возможно ли это? В последнем абзаце вы упомянули репозитории, размещенные на NAS, как «удаленные» — этот термин используется для обозначения того, что NAS удален от любой из хост-машин, которые я (например) делаю и вношу изменения в файлы в репо?

user5395338 18.11.2022 21:59

Я не использую ни Mac, ни GitHub Desktop, поэтому я не могу вам с этим помочь... но создание чистого репозитория — это одноразовая операция для каждого репозитория, поэтому она не должна влиять на ваш обычный рабочий процесс. «Удаленный» — это любой клон вашего репозитория, отличный от того, о котором вы сейчас говорите: git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

Thomas 20.11.2022 09:57
Ответ принят как подходящий

Обычно неразумно монтировать внешний (подключенный к сети) диск в качестве файловой системы и использовать его таким образом, то есть в качестве общего диска, для размещения репозитория Git. Причина этого в том, что Git очень сильно зависит от семантики POSIX:

  • что создание файла с O_CREAT | O_EXCL работает для создания файлов блокировки;
  • что переименование файла с помощью одного системного вызова rename является атомарным;

И многие другие вещи, которые часто не верны для NFS, Samba и других сетевых файловых систем. (Но если вы осторожно используете только одного клиента за раз и ждете завершения всего трафика, прежде чем переходить к другому клиенту, вы можете подумать о том, чтобы рискнуть. Почти все случаи сбоя POSIX-семантики связаны с параллельным использованием. )

Использование сетевого устройства в качестве (псевдо) диска, например, с iSCSI, обычно работает. Но в этом случае вы теряете все преимущества, которые надеялись получить, используя NAS-бокс.

Однако, если блок NAS поддерживает протоколы Git, ssh или HTTPS, Ответ Томаса работает нормально: у вас есть блок NAS, предоставляющий локальный голый клон, и вы клонируете этот локальный клон на каждую локальную машину, на которой вы буду работать. Вы можете вернуться к этому «голому» клону и — при условии, что коробка NAS достаточно гибкая — «отправить» с «голого» клона NAS на хост-сервер (GitHub / GitLab / Bitbucket / что-то еще).

(FreeNAS и TrueNAS могут делать то, что вам нужно, поскольку они являются полноценными системами Unix-y, работающими под управлением FreeBSD или Linux, в зависимости от используемой вами конфигурации. Я не уверен, что Synology может, их коробки немного более непрозрачны.)

Коробка NAS поддерживает все эти протоколы IIRC. У меня возникли трудности с переводом абзаца, начинающегося с w If the NAS box..., в рабочий процесс. Для меня это могло бы иметь больше смысла, если бы мы конкретизировали; то есть, если бы я назвал свое репозиторий, настроенный в данный момент, на хосте MyMac01 RepoX@MyMac01, а «голый клон» на NAS RepoX@NAS. Если я следую, мне нужно: 1. настроить голый репозиторий на NAS с именем RepoX, 2) скопировать (как в cp?) все файлы из RepoX@MyMac01 в RepoX@NAS, 3) удалить (?) RepoX@MyMac01 с MyMac01, 4 ) клонировать RepoX@NAS на Mac01. Это даже близко?

user5395338 22.11.2022 11:39

Я имею в виду следующее: вы используете NAS для запуска Git. Войдите, cd /home/git; git clone --bare <github-url> (при условии, что здесь уместно /home/git). Теперь у вас есть голый клон в этом месте. Теперь вы можете git clone ssh://git@nasbox/repo.git с Mac, RPI или чего-то еще. В этом примере используется ssh (это моя предпочтительная настройка, она намного проще, чем https, и более безопасна, чем git://), но другие протоколы будут почти такими же, за исключением того, что расположение репозиториев на коробке NAS, вероятно, изменится.

torek 22.11.2022 11:42

Спасибо за вашу помощь. Я чувствую, что это, скорее всего, правильный ответ, но я еще не смог подтвердить это на своем устройстве Synology. Техническая поддержка Synology - кровавая катастрофа! Я выбрал Synology, потому что чувствовал, что если я куплю их продукт, то получу солидную поддержку. Вот что я получаю за размышления!! В любом случае, я все же хотел бы подтвердить ваш ответ, прежде чем принять его, и приношу свои извинения за задержку.

user5395338 29.11.2022 17:50

На самом деле я не использовал окно Synology (я основывал свой «более непрозрачный» комментарий на некоторых вещах, которые я узнал от кого-то, кто имел), я не могу сказать наверняка. Если бы я настраивал NAS сегодня, я бы сам использовал FreeNAS или TrueNAS, но на самом деле я некоторое время работал на iX (увы, над проектом, который был отменен).

torek 30.11.2022 01:42

О, извините, я не спрашивал мнения о Synology... Я понял! :) LOL <анекдот> Сегодня у меня был долгий телефонный разговор с инженером службы поддержки Synology. Он показался мне очень порядочным парнем и признал, что у Synology есть нерешенные проблемы. Я понимаю, но если вы не можете обслуживать то, что продаете, вам не следует продавать — это мошенничество.</anecdote> В любом случае, я не могу сейчас завершить установку Git-сервера на Synology. Если это сохранится и после следующей недели, я отложу Synology в сторону и попробую FreeNAS или TrueNAS на другом компьютере.

user5395338 30.11.2022 02:49

Подтвержден правильный ответ, но ПРИМЕЧАНИЕ. Это будет работать на многих (большинстве, на всех ??) устройствах NAS, но не будет работать на Synology. Я не буду вдаваться в подробности, но если вы думаете о Synology NAS, мой совет — подумайте еще немного!

user5395338 05.12.2022 22:39

Другие вопросы по теме