Szukałem sposobu wykonania polecenia git ze ścieżki i wprowadzenia zmian w repozytorium inną ścieżką. Skończyło się na tym pytaniu tutaj.
Ale w przypadku moich konkretnych potrzeb ani zaakceptowana odpowiedź, ani żadna z pozostałych nie pomogła.
Musiałem uruchamiać polecenia git przy użyciu sudo -u USER /usr/bin/git
(inny użytkownik go uruchamiający). I jak zapewne wiesz, sudo nie pozwala mi na uruchomienie cd
polecenia, więc nie mogę znajdować się w katalogu repozytorium.
Poszedłem na stronę podręcznika użytkownika git . Wśród opcji widziałem --git-dir=<path>
:
--git-dir =
Ustaw ścieżkę do repozytorium. Można to również kontrolować, ustawiając zmienną środowiskową GIT_DIR. Może to być ścieżka bezwzględna lub ścieżka względna do bieżącego katalogu roboczego.
Jeśli więc komuś pomoże, nadal możesz używać git ze ścieżki i wprowadzać zmiany w repozytorium „daleko od ciebie”. Po prostu użyj:
git --git-dir=/path/to/repository GIT_COMMAND
lub, aby uruchomić go jako inny użytkownik, wykonaj coś takiego:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Również ze strony man git-init :
Jeśli ustawiona jest zmienna środowiskowa $ GIT_DIR, określa ona ścieżkę do użycia zamiast ./.git dla podstawy repozytorium.
Jeśli więc chcesz zainicjować repozytorium w zwykłym folderze .git, musisz określić go wraz z --git-dir
opcją. na przykład:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Po zainicjowaniu repozytorium /path/to/repo/.git
wszystkie dalsze komendy powinny mieć opcję --work-tree=<path>
opisaną na stronie man git:
--work-tree =
Ustaw ścieżkę do działającego drzewa. Może to być ścieżka bezwzględna lub ścieżka względem bieżącego katalogu roboczego. Można to również kontrolować, ustawiając zmienną środowiskową GIT_WORK_TREE i zmienną konfiguracyjną core.worktree (więcej szczegółów na ten temat można znaleźć w core.worktree w git-config (1)).
Tak więc właściwym poleceniem do uruchomienia git jako innego użytkownika i zainicjowania nowego repozytorium jest:
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