Saya punya proyek dengan git, dan saya hanya ingin mengkloning atau menarik direktori tertentu, seperti myproject / javascript seperti halnya subversi.
buat beberapa perubahan, komit dan dorong kembali.
Itu mungkin?
Saya punya proyek dengan git, dan saya hanya ingin mengkloning atau menarik direktori tertentu, seperti myproject / javascript seperti halnya subversi.
buat beberapa perubahan, komit dan dorong kembali.
Itu mungkin?
Jawaban:
git fetch
git checkout HEAD path/to/your/dir/or/file
Di mana " path/...
" dalam (3) dimulai pada direktori tepat di bawah akar repo yang berisi " .../file
" Anda
Perhatikan bahwa alih-alih "HEAD", kode hash dari komit tertentu dapat digunakan, dan kemudian Anda akan mendapatkan revisi (file) atau revisi (dir) khusus untuk komit itu.
--
tidak diperlukan. Itu memaksa bit setelah itu untuk ditafsirkan sebagai jalan. Jadi, ya, jika Anda memiliki file dengan nama --help
yang ingin Anda checkout, awalan dengan tanda hubung ini diperlukan:git checkout HEAD -- --help
Dalam direktori kosong:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
atau checkout
perintah, kita bisa membuat permintaan tarik demi remote add
perintah untuk mendapatkan seluruh cabang master.
Setelah banyak mencari jawaban, tidak menemukan, menyerah, mencoba lagi dan seterusnya, saya akhirnya menemukan solusi untuk ini di utas SO lainnya:
Cara git-pull semua kecuali satu folder
Untuk menyalin-rekatkan apa yang ada di sana:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
Untuk melakukan apa yang diinginkan OP (hanya bekerja pada satu dir), cukup tambahkan satu dir ke .git/info/sparse-checkout
, ketika melakukan langkah-langkah di atas.
Banyak terima kasih banyak kepada @cforbish!
master
. Pastikan Anda melakukannya git branch --set-upstream-to=origin/<branch>
dengan benar
Itu tidak mungkin. Anda perlu menarik semua repositori atau tidak sama sekali.
Mungkin perintah ini bisa membantu:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Jika Anda ingin mendapatkan perubahan terbaru dalam direktori tanpa memasukkannya, Anda dapat melakukan:
$ git -C <Path to directory> pull
git clone --filter
dari Git 2.19
Opsi ini sebenarnya akan melewatkan mengambil objek yang tidak dibutuhkan dari server.
Saya telah menulis jawaban terperinci yang menjelaskan status dukungan saat ini di: Bagaimana saya mengkloning hanya subdirektori dari repositori Git?
Sangat mungkin bahwa apa pun yang diterapkan git clone
di daerah itu juga akan memiliki git pull
analog.
Mencoba dan menguji ini berhasil!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Semoga ini bermanfaat!
Kadang-kadang, Anda hanya ingin melihat salinan file sebelumnya tanpa kesulitan melalui diffs.
Dalam kasus seperti itu, sangat mudah untuk membuat klon dari repositori dan memeriksa komit spesifik yang Anda minati dan melihat subdirektori dalam repositori yang dikloning itu. Karena semuanya lokal Anda hanya dapat menghapus klon ini ketika Anda selesai.
Untuk semua perjuangan dengan jalur file teoretis dan contoh-contoh seperti yang saya lakukan, di sini contoh nyata: Microsoft menawarkan dokumen dan contoh mereka di git hub, sayangnya mereka mengumpulkan semua file contoh mereka untuk sejumlah besar topik dalam repositori ini:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Saya hanya tertarik pada file Microsoft Dynamics js di path
msdn-code-gallery-community-s-z/Sdk.Soap.js/
jadi saya melakukan yang berikut
membuat
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
file di folder repositori saya pada disk
git sparse-checkout init
dalam direktori itu menggunakan cmd di windows
Isi file
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
adalah
Sdk.Soap.js/*
akhirnya lakukan a
git pull origin master