У меня есть несколько репозиториев на 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, поэтому я хотел спросить, есть ли какие-либо очевидные проблемы с этой настройкой или есть ли лучший способ достичь моей цели?
@mkrieger1: Мне это определенно подходит.
Я имел в виду: если бы вы разместили свои репозитории не на GitHub (скажем, GitLab или Bitbucket), ваш вопрос был бы таким же.
Я тоже сейчас немного в замешательстве. Используете ли вы GitHub в качестве хоста для своих репозиториев (т. е. у вас есть учетная запись GitHub и вы можете видеть свои репозитории на github.com/your_username), или вы используете только клиентское программное обеспечение GitHub для управления локальными репозиториями на вашем жесткий диск? Если вы на самом деле используете GitHub в качестве хоста, зачем вам размещать все на локальном NAS в дополнение к GitHub?
Да, это возможно, если использовать 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 удален от любой из хост-машин, которые я (например) делаю и вношу изменения в файлы в репо?
Я не использую ни Mac, ни GitHub Desktop, поэтому я не могу вам с этим помочь... но создание чистого репозитория — это одноразовая операция для каждого репозитория, поэтому она не должна влиять на ваш обычный рабочий процесс. «Удаленный» — это любой клон вашего репозитория, отличный от того, о котором вы сейчас говорите: git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
Обычно неразумно монтировать внешний (подключенный к сети) диск в качестве файловой системы и использовать его таким образом, то есть в качестве общего диска, для размещения репозитория 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. Это даже близко?
Я имею в виду следующее: вы используете 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, вероятно, изменится.
Спасибо за вашу помощь. Я чувствую, что это, скорее всего, правильный ответ, но я еще не смог подтвердить это на своем устройстве Synology. Техническая поддержка Synology - кровавая катастрофа! Я выбрал Synology, потому что чувствовал, что если я куплю их продукт, то получу солидную поддержку. Вот что я получаю за размышления!! В любом случае, я все же хотел бы подтвердить ваш ответ, прежде чем принять его, и приношу свои извинения за задержку.
На самом деле я не использовал окно Synology (я основывал свой «более непрозрачный» комментарий на некоторых вещах, которые я узнал от кого-то, кто имел), я не могу сказать наверняка. Если бы я настраивал NAS сегодня, я бы сам использовал FreeNAS или TrueNAS, но на самом деле я некоторое время работал на iX (увы, над проектом, который был отменен).
О, извините, я не спрашивал мнения о Synology... Я понял! :) LOL <анекдот> Сегодня у меня был долгий телефонный разговор с инженером службы поддержки Synology. Он показался мне очень порядочным парнем и признал, что у Synology есть нерешенные проблемы. Я понимаю, но если вы не можете обслуживать то, что продаете, вам не следует продавать — это мошенничество.</anecdote> В любом случае, я не могу сейчас завершить установку Git-сервера на Synology. Если это сохранится и после следующей недели, я отложу Synology в сторону и попробую FreeNAS или TrueNAS на другом компьютере.
Подтвержден правильный ответ, но ПРИМЕЧАНИЕ. Это будет работать на многих (большинстве, на всех ??) устройствах NAS, но не будет работать на Synology. Я не буду вдаваться в подробности, но если вы думаете о Synology NAS, мой совет — подумайте еще немного!
Это не имеет никакого отношения к GitHub, не так ли?