Katakanlah saya memiliki direktori /X/Y
,, yang merupakan repositori git. Apakah mungkin memanggil perintah seperti git pull
dari dalam/X
, tetapi menargetkan /X/Y
direktori?
EDIT: Saya kira saya bertanya-tanya secara spesifik: apakah mungkin untuk melakukan ini menggunakan perintah a git, tetapi tanpa harus mengubah direktori?
CATATAN: Saya telah menerima jawaban VonC karena jauh lebih elegan daripada opsi sebelumnya. Untuk orang yang menggunakan Git lebih dari 1.8.5, silakan lihat jawaban bstpierre di bawah ini .
Jawaban:
Mulai git 1.8.5 (Q4 2013) , Anda akan dapat "menggunakan perintah Git, tetapi tanpa harus mengubah direktori".
Lihat commit 44e1e4 oleh Nazri Ramliy :
Sejak Git 2.3.4 (Maret 2015), dan melakukan 6a536e2 oleh Karthik Nayak (
KarthikNayak
) ,git
akan memperlakukan "git -C '<path>'
" sebagai larangan ketika<path>
kosong.4 tahun kemudian, Git 2.23 (Q3 2019) mendokumentasikan bahwa '
git -C ""
' berfungsi dan tidak mengubah direktoriItu berarti dokumentasi sekarang (akhirnya) meliputi:
Anda dapat melihat
git -C
digunakan dengan Git 2.26 (Q1 2020), sebagai contoh.Lihat komit b441717 , komit 9291e63 , komit 5236fce , komit 10812c2 , komit 62d58cd , komit b87b02c , komit 9b92070 , komit 3595d10 , komit f511bc0 , komit f6041ab , komit f46c243 , komit 99c049b , komit 3.738.439 , komit 7.717.242 , komit b8afb90 (20 Desember 2019) oleh Denton Liu (
Denton-L
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 381e8e9 , 05 Feb 2020)sumber
apt-get install software-properties-common python-software-properties
lalu tambahkan repo gitadd-apt-repository ppa:git-core/ppa
. Langkah terakhir adalah untuk memperbarui git:apt-get update && apt-get upgrade
.Edit :
Ada bug dengan
git pull
, atau Anda tidak dapat melakukan apa yang Anda coba lakukan dengan perintah itu. Namun Anda dapat melakukannya dengan mengambil dan menggabungkan:Jawaban asli :
Dengan asumsi Anda menjalankan bash atau serupa, Anda bisa melakukannya
(cd /X/Y; git pull)
.Halaman git man menetapkan beberapa variabel (lihat "Gudang git") yang sepertinya membantu, tetapi saya tidak bisa membuatnya berfungsi dengan benar (dengan repositori saya di / tmp / ggg2):
Menjalankan perintah di bawah ini sementara cwd saya adalah / tmp memperbarui repo itu, tetapi file yang diperbarui muncul di / tmp alih-alih pohon kerja / tmp / ggg2:
Lihat juga jawaban ini untuk pertanyaan serupa , yang menunjukkan
--git-dir
dan--work-tree
bendera.sumber
.git
direktori.git --git-dir=/tmp/ggg2/.git --work-tree=/tmp/ggg2 pull
, saya mendapatkan pesan kesalahan. Tetapi jika saya lakukangit --git-dir=/tmp/ggg2/.git --work-tree=. pull
saat saya di / tmp, itu menempatkan file yang diperbarui di / tmp sebagaimana mestinya.--work-tree
sekarang seperti--work-tree=/tmp/ggg2/
dan--work-tree=/tmp/ggg2/.
karena itu bisa menjadi masalah dengan bagaimana cara mengurai path.Anda dapat membungkusnya dalam skrip bash atau alias git:
sumber
pushd/popd
pasangan sebagai ganticd/cd-
(cd xyz && git pull)
Posting ini agak lama sehingga bisa jadi ada bug dan diperbaiki, tapi saya baru saja melakukan ini:
Dan itu berhasil. Butuh beberapa saat untuk mencari tahu bahwa ia menginginkan direktori dotfile dan orang tua (dalam pengaturan standar yang selalu orangtua / anak tetapi tidak di SEMUA pengaturan, sehingga mereka perlu ditentukan secara eksplisit.
sumber
Karena beberapa server saya menggunakan versi Ubuntu LTS lama, saya tidak dapat dengan mudah meningkatkan git ke versi terbaru (yang mendukung opsi -C seperti dijelaskan dalam beberapa jawaban).
Trik ini berfungsi baik untuk saya, terutama karena itu tidak memiliki efek samping dari beberapa jawaban lain yang membuat Anda berada di direktori yang berbeda dari tempat Anda memulai.
Atau, melakukannya sebagai one-liner:
Baik Linux dan Windows memiliki perintah pushd dan popd.
sumber
Menggunakan kombinasi
pushd
,git pull
danpopd
, kami dapat mencapai fungsi ini:Sebagai contoh:
sumber
Anda dapat menulis skrip seperti ini:
Anda dapat memberi nama sesuatu seperti itu
gitpull
.Jika Anda lebih suka melakukannya lakukan direktori arbitrer daripada
/X/Y
:Kemudian Anda dapat menyebutnya dengan
gitpull /X/Z
Terakhir, Anda dapat mencoba menemukan repositori. Saya memiliki
~/git
folder yang berisi repositori, dan Anda dapat menggunakan ini untuk melakukan semuanya.sumber
(cd /X/Y && git pull)
.Untuk orang seperti saya yang mencoba melakukan ini melalui perintah drush (Drupal shell) pada server jarak jauh, Anda tidak akan dapat menggunakan solusi yang mengharuskan Anda untuk CD ke direktori kerja:
Alih-alih, Anda perlu menggunakan solusi yang memecah tarikan menjadi mengambil & menggabungkan:
sumber
Ini mungkin masalah yang serupa, tetapi Anda juga dapat dengan mudah mengirim perintah. misalnya
Pada satu baris
Atau melalui SSH.
sumber