Я шукав спосіб виконати команду git з шляху та внести зміни до сховища іншим шляхом. Тому я закінчився цим питанням тут.
Але для моїх конкретних потреб не допомогла ні прийнята відповідь, ні будь-яка інша.
Мені потрібно було запускати команди git за допомогою sudo -u USER /usr/bin/git
(інший користувач, який його виконує). І як ви знаєте, sudo не дозволяє мені запустити cd
команду, тому я не можу бути в каталозі репозиторію.
Отже, я перейшов на сторінку git's man . І серед варіантів я побачив --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:
- робота-дерево =
Встановіть шлях до робочого дерева. Це може бути абсолютний шлях або шлях відносно поточного робочого каталогу. Це також можна керувати, встановивши змінну середовища 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