Я искал способ выполнить команду git из пути и внести изменения в хранилище по другому пути. Так что я оказался в этом вопросе здесь.
Но для моих конкретных нужд не помог ни принятый ответ, ни какой-либо другой.
Мне нужно было запускать команды git sudo -u USER /usr/bin/git
(другой пользователь запускает его). И, как вы, возможно, знаете, sudo не позволяет мне запускать cd
команду, поэтому я не могу находиться в каталоге репозитория.
Итак, я пошел на страницу руководства Git . И среди вариантов я увидел --git-dir=<path>
:
--git-Dir =
Установите путь к хранилищу. Это также можно контролировать, устанавливая переменную среды GIT_DIR. Это может быть абсолютный или относительный путь к текущему рабочему каталогу.
Так что, если это кому-то поможет, вы все равно можете использовать git с пути и вносить изменения в хранилище «далеко от вас». Просто используйте:
git --git-dir=/path/to/repository GIT_COMMAND
или, чтобы запустить его от имени другого пользователя, сделайте что-то вроде:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Также со справочной страницы git-init :
Если установлена переменная среды $ GIT_DIR, то она указывает путь, который следует использовать вместо ./.git для базы репозитория.
Итак, если вы хотите запустить репозиторий из обычной папки .git, вам нужно будет указать его вместе с --git-dir
опцией. например:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
После инициализации репозитория /path/to/repo/.git
все последующие команды должны иметь опцию --work-tree=<path>
, как описано на справочной странице git:
--work дерево =
Установите путь к рабочему дереву. Это может быть абсолютный путь или путь относительно текущего рабочего каталога. Это также можно контролировать, задав переменную среды GIT_WORK_TREE и конфигурационную переменную core.worktree (для более подробного обсуждения см. Core.worktree в git-config (1)).
Итак, правильная команда для запуска git от имени другого пользователя и инициализации нового репозитория:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' add /path/to/repository/*
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' commit -m 'MESSAGE'
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' remote add origin user@domain.com:path
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir='/path/to/repository/.git' --work-tree='/path/to/repository' push -u origin master