Saya mencari cara untuk mengeksekusi perintah git dari sebuah path, dan membuat perubahan pada repositori di path yang berbeda. Jadi saya berakhir dengan pertanyaan ini di sini.
Tetapi untuk kebutuhan spesifik saya, baik jawaban yang diterima maupun yang lain tidak membantu.
Saya perlu menjalankan perintah git menggunakan sudo -u USER /usr/bin/git
(pengguna lain yang menjalankannya). Dan seperti yang Anda ketahui, sudo tidak mengizinkan saya menjalankan cd
perintah, jadi saya tidak bisa berada di direktori repositori.
Jadi, saya pergi ke halaman manual git . Dan di antara beberapa opsi, saya melihat --git-dir=<path>
:
--git-dir =
Setel path ke repositori. Ini juga dapat dikontrol dengan mengatur variabel lingkungan GIT_DIR. Ini bisa menjadi jalur absolut atau jalur relatif ke direktori kerja saat ini.
Jadi, jika itu membantu seseorang, Anda masih bisa menggunakan git dari path dan membuat perubahan pada repositori "jauh dari Anda". Cukup gunakan:
git --git-dir=/path/to/repository GIT_COMMAND
atau, untuk menjalankannya sebagai pengguna lain, lakukan sesuatu seperti:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository GIT_COMMAND
Juga dari halaman manual git-init :
Jika variabel lingkungan $ GIT_DIR disetel, maka ia menentukan lintasan untuk digunakan sebagai ganti ./.git untuk basis repositori.
Jadi, jika Anda ingin init repositori di bawah folder .git yang biasa, Anda harus menentukannya bersama dengan --git-dir
opsi. misalnya:
echo USER_PASSWORD | sudo -u USER_LOGIN -S /usr/bin/git --git-dir=/path/to/repository/.git init
Setelah menginisialisasi repositori /path/to/repo/.git
, semua perintah lebih lanjut harus memiliki opsi --work-tree=<path>
, seperti yang dijelaskan pada halaman manual git:
--work-tree =
Atur jalur ke pohon yang berfungsi. Ini bisa menjadi jalur absolut atau jalur relatif ke direktori kerja saat ini. Ini juga dapat dikontrol dengan mengatur variabel lingkungan GIT_WORK_TREE dan variabel konfigurasi core.worktree (lihat core.worktree di git-config (1) untuk diskusi yang lebih rinci).
Jadi, perintah yang tepat untuk menjalankan git sebagai pengguna lain, dan menginisialisasi repositori baru adalah:
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