Apa mekanisme yang paling efisien (berkenaan dengan data yang ditransfer dan ruang disk yang digunakan) untuk mendapatkan isi dari satu file dari repositori git jarak jauh?
Sejauh ini saya sudah berhasil menemukan:
git clone --no-checkout --depth 1 [email protected]:foo/bar.git && cd bar && git show HEAD:path/to/file.txt
Ini masih terlihat berlebihan.
Bagaimana dengan mendapatkan beberapa file dari repo?
git
git-checkout
sparse-checkout
git-sparse-checkout
dreftymac
sumber
sumber
Jawaban:
di git versi 1.7.9.5 ini tampaknya berfungsi untuk mengekspor satu file dari jarak jauh
Ini akan menjadi cat dari isi file
README.md
.sumber
git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x
cat README.md
tar -xO
untuk output ke STDOUT untuk pemipaan, misalnyaFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
Sebagai lanjutan dari jawaban Jakub .
git archive
menghasilkan tar atau arsip zip, jadi Anda perlu menyalurkan output melalui tar untuk mendapatkan konten file:Akan menyimpan salinan 'nama file' dari HEAD repositori jarak jauh di direktori saat ini.
Bagian
:path/to/directory
ini opsional. Jika dikecualikan, file yang diambil akan disimpan ke<current working dir>/path/to/directory/filename
Selain itu, jika Anda ingin mengaktifkan penggunaan
git archive --remote
repositori on Git yang di-host oleh git-daemon, Anda perlu mengaktifkan opsi konfigurasi daemon.uploadarch. Lihat https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlsumber
Jika ada antarmuka web digunakan (seperti gitweb, cgit, Gitorious, ginatra), Anda dapat menggunakannya untuk mengunduh file tunggal (tampilan 'mentah' atau 'polos').
Jika pihak lain mengaktifkannya , Anda dapat menggunakan opsi 's' ' arsip git
--remote=<URL>
(dan mungkin membatasinya ke direktori yang diberikan file berada di), misalnya:sumber
git config daemon.uploadarch true
pada repositori jarak jauh. Secara default git daemon menonaktifkan arsip jarak jauh dengan "fatal: remote error: akses ditolak atau repositori tidak diekspor: ..."git archive
Pendekatan ini adalah percobaan pertama saya - tetapi kemudian saya perhatikan bahwa mewajibkantar
mesin klien tidak nyaman bagi pengguna Windows. Kami akhirnya mengambil daricgit
server lokal kami . Ini berfungsi, tetapi tidak secepat yang saya inginkan (dan masih membutuhkan menjalankanunix2dos
atau serupa pada mesin Windows karena kita menyimpan file dengan akhiran baris Unix di repositori Git).Tidak secara umum tetapi jika Anda menggunakan Github:
Bagi saya
wget
url mentah ternyata menjadi cara terbaik dan termudah untuk mengunduh satu file tertentu.Buka file di browser dan klik tombol "Raw". Sekarang segarkan browser Anda, salin url dan lakukan
wget
ataucurl
di atasnya.wget contoh:
wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py
Contoh ikal:
curl 'https://example.com/raw.txt' > savedFile.txt
sumber
curl https://example.com/raw.txt > savedFile.txt
Untuk mengekspor satu file dari jarak jauh:
Ini akan mengunduh file
README.md
ke direktori Anda saat ini.Jika Anda ingin konten file diekspor ke STDOUT:
Anda dapat memberikan banyak jalur di akhir perintah.
sumber
Sepertinya solusi bagi saya: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html
di mana
4
berarti empat revisi dari sekarang dan~
merupakan tilde sebagaimana disebutkan dalam komentar.sumber
git show HEAD:./my_other_file > local_file
jika file tersebut tidak berada di direktori root Anda :)Saya menggunakan ini
sumber
wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate.
To connect to raw.github.com insecurely, use '--no-check-certificate'.
Varian bernuansa dari beberapa jawaban di sini yang menjawab pertanyaan OP:
sumber
Jika repositori Anda mendukung token (misalnya GitLab) kemudian buat token untuk pengguna Anda lalu navigasikan ke file yang akan Anda unduh dan klik pada output RAW untuk mendapatkan URL. Untuk mengunduh file gunakan:
sumber
Saya memecahkan dengan cara ini:
Jika mau, Anda bisa mengganti "BranchName" dengan "HEAD"
sumber
Menurut saya cara termudah untuk menggunakan yang berikut:
sumber
Jawaban Yisrael Dov adalah yang langsung, tetapi tidak memungkinkan kompresi. Anda dapat menggunakan
--format=zip
, tetapi Anda tidak dapat secara langsung unzip dengan perintah pipa seperti yang Anda bisa dengan tar, jadi Anda harus menyimpannya sebagai file sementara. Ini skripnya:Ini berfungsi dengan direktori juga.
sumber
Untuk file tunggal, cukup gunakan perintah wget.
Pertama, ikuti gambar di bawah ini untuk mengklik "mentah" untuk mendapatkan url, jika tidak Anda akan mengunduh kode yang tertanam dalam html.
Kemudian, browser akan membuka halaman baru dengan url mulai dengan https://raw.githubusercontent.com/ ...
cukup masukkan perintah di terminal:
Beberapa saat file akan dimasukkan ke folder Anda.
sumber
Jika repositori Git Anda di-host di Azure-DevOps (VSTS), Anda dapat mengambil satu file dengan Rest API .
Format API ini terlihat seperti ini:
Sebagai contoh:
sumber
Saya menggunakan curl, ini bekerja dengan repo publik atau yang menggunakan https otentikasi dasar melalui antarmuka web.
curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD
Saya sudah mengujinya di github dan bitbucket, berfungsi pada keduanya.
sumber
Jika Anda ingin mendapatkan file dari hash tertentu + repositori jarak jauh, saya sudah mencoba git-arsip dan tidak berhasil.
Anda harus menggunakan git clone dan begitu repositori dikloning, Anda harus menggunakan git-arsip untuk membuatnya bekerja.
Saya memposting pertanyaan tentang bagaimana melakukannya dengan lebih mudah di arsip git dari hash tertentu dari jarak jauh
sumber
untuk bitbucket langsung dari browser (saya menggunakan safari ...) klik kanan pada 'View Raw "dan pilih" Unduh Linked File ":
sumber
Jika Anda tidak keberatan mengkloning seluruh direktori, fungsi bash / zsh kecil ini akan memiliki hasil akhir dari mengkloning satu file ke direktori Anda saat ini (dengan mengkloning repo ke direktori temp dan menghapusnya setelah itu).
Pro: Anda hanya mendapatkan file yang Anda inginkan
Con: Anda masih harus menunggu seluruh repo untuk dikloning
sumber
Solusi Github Enterprise
sumber
GITHUB_PERSONAL_ACCESS_TOKEN
?Jika tujuan Anda hanya untuk mengunduh file, ada aplikasi tanpa kerumitan bernama
gget
:Contoh di atas akan mengunduh satu file dari
hugo
repositori.https://github.com/dpb587/gget
sumber
Terkait dengan jawaban @Steven Penny, saya juga menggunakan wget. Selanjutnya, untuk memutuskan file mana yang akan dikirim untuk saya gunakan -O.
Jika Anda menggunakan gitlabs, kemungkinan lain untuk url adalah:
Kecuali Anda memiliki sertifikat atau Anda mengakses dari server tepercaya untuk instalasi gitlabs yang Anda butuhkan --tidak-periksa-sertifikat seperti yang dikatakan @Kos. Saya lebih suka itu daripada memodifikasi .wgetrc tetapi itu tergantung pada kebutuhan Anda.
Jika ini file besar, Anda mungkin mempertimbangkan untuk menggunakan opsi -c dengan wget. Agar dapat terus mengunduh file dari tempat Anda meninggalkannya jika maksud sebelumnya gagal di tengah.
sumber