Saya memiliki akun GitHub perusahaan dan saya ingin mencadangkan semua repositori di dalamnya, memperhitungkan semua hal baru yang mungkin dibuat untuk tujuan otomatisasi. Saya berharap sesuatu seperti ini:
git clone [email protected]:company/*.git
atau serupa akan berfungsi, tetapi tampaknya tidak menyukai karakter pengganti di sana.
Adakah cara di Git untuk mengkloning dan menarik semuanya dengan asumsi seseorang memiliki izin yang sesuai?
Jawaban:
Saya rasa tidak mungkin melakukannya dengan cara itu. Taruhan terbaik Anda adalah menemukan dan mengulang melalui daftar repositori Organisasi menggunakan API.
Coba ini:
http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
ssh_url
properti secara khusus.git clone
masing-masingssh_url
s.Ini sedikit pekerjaan ekstra, tetapi GitHub perlu memiliki otentikasi yang tepat.
sumber
curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
https://github.com/api/v3/
, cobahttps://api.github.com/
./users/${COMPANY}/repos
jalur, bukan/orgs/${COMPANY}/repos
.access_token
parameter kueri sudah tidak digunakan lagi. Jika token ini digunakan oleh aplikasi yang tidak Anda kendalikan, ketahuilah bahwa token ini mungkin berhenti berfungsi karena penghentian ini.Di Windows dan semua sistem UNIX / LINUX , menggunakan Git Bash atau Terminal lainnya , ganti
YOURUSERNAME
dengan nama pengguna Anda dan gunakan:CNTX=users
danNAME=yourusername
, untuk mengunduh semua repositori Anda.CNTX=orgs
danNAME=yourorgname
, untuk mengunduh semua repositori organisasi Anda.Ukuran halaman maksimum adalah 100, jadi Anda harus memanggil ini beberapa kali dengan nomor halaman yang benar untuk mendapatkan semua repositori Anda (setel
PAGE
ke nomor halaman yang diinginkan yang ingin Anda unduh).Berikut adalah skrip shell yang melakukan hal di atas: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e
sumber
Repositori organisasi
Untuk menggandakan semua repo dari organisasi Anda, coba shell one-liner berikut:
Repositori pengguna
Menggandakan semua menggunakan URL repositori Git:
Mengkloning semua menggunakan Clone URL:
Berikut adalah fungsi shell yang dapat ditambahkan ke file startup pengguna (menggunakan
curl
+jq
):Repositori pribadi
Jika Anda perlu mengkloning repo pribadi, Anda dapat menambahkan token Otorisasi di header Anda seperti:
atau berikan di param (
?access_token=TOKEN
), misalnya:Catatan:
type=private
ke string kueri Anda.hub
setelah mengonfigurasi kunci API Anda.Lihat juga:
Petunjuk :
- Untuk meningkatkan kecepatan, atur jumlah proses paralel dengan menentukan
-P
parameter untukxargs
(-P4
= 4 proses).- Jika Anda perlu meningkatkan batas GitHub, coba autentikasi dengan menentukan kunci API Anda.
- Tambahkan
--recursive
untuk mengulang ke submodul terdaftar, dan perbarui setiap submodul bersarang di dalamnya.sumber
Inti ini menyelesaikan tugas dalam satu baris pada baris perintah:
Ganti
[your_org]
dengan nama organisasi Anda. Dan aturper_page
jika perlu.MEMPERBARUI:
Seperti yang disebutkan ATutorMe, ukuran halaman maksimum adalah 100, menurut dokumen GitHub .
Jika Anda memiliki lebih dari 100 repo, Anda harus menambahkan
page
parameter ke url Anda dan Anda dapat menjalankan perintah untuk setiap halaman.Catatan:
per_page
Parameter defaultnya adalah30
.sumber
Buka Pengaturan Akun -> Aplikasi dan buat kunci API
Kemudian masukkan kunci API, url instance github, dan nama organisasi pada skrip di bawah ini
Simpan itu dalam sebuah file,
chmod u+x
file tersebut, lalu jalankan.Terima kasih kepada Arnaud untuk kode rubynya.
sumber
Jadi, saya akan menambahkan jawaban saya juga. :) (Saya merasa itu sederhana)
Ambil daftar (saya telah menggunakan perusahaan "magento"):
Gunakan
clone_url
sebagai gantinyassh_url
untuk menggunakan akses HTTP.Jadi, mari kita kloning semuanya! :)
Jika Anda akan mengambil repo pribadi - cukup tambahkan parameter GET
?access_token=YOURTOKEN
sumber
Saya menemukan komentar di inti @seancdavis yang disediakan untuk sangat membantu, terutama karena seperti poster aslinya, saya ingin menyinkronkan semua repo untuk akses cepat, namun sebagian besar bersifat pribadi.
Ganti [[USERNAME]] dengan nama pengguna github Anda dan [[ORGANIZATION]] dengan organisasi Github Anda. Output (metadata repo JSON) akan diteruskan ke skrip ruby sederhana:
sumber
.../orgs/[[organization]]/repos...
ke.../users/[[username]]/repos...
. Sekarang saya dapat dengan cepat mengimpor semua pekerjaan saya ke mesin lokal yang berbeda. TERIMA KASIH!Saya membuat skrip dengan Python3 dan Github APIv3
https://github.com/muhasturk/gitim
Lari saja
sumber
Python one-liner ini akan melakukan apa yang Anda butuhkan. Itu:
untuk masing-masing, lakukan panggilan sistem ke
git clone
sumber
sumber
?page=2
.Solusi sederhana:
sumber
Untuk menggunakannya (dengan asumsi Anda telah menginstal nodejs)
Ini akan mendapatkan daftar semua repo dari
wires
dan menulis info ketest
direktori, menggunakan detail otorisasi (pengguna / sandi) yang Anda berikan di CLI.Secara detail, itu
Ini tidak benar-benar mengkloning repo, tetapi menulis
.txt
file yang dapat Anda berikanxargs
untuk melakukan kloning, misalnya:Mungkin ini berguna untuk Anda; itu hanya beberapa baris JS jadi harus mudah menyesuaikan dengan kebutuhan Anda
sumber
Ada juga modul npm yang sangat berguna untuk melakukan ini. Itu tidak hanya dapat mengkloning, tetapi juga menarik (untuk memperbarui data yang sudah Anda miliki).
Anda cukup membuat konfigurasi seperti ini:
dan lakukan
gitall clone
misalnya. Ataugitall pull
sumber
Jika ada yang mencari solusi Windows, berikut adalah sedikit fungsi di PowerShell untuk melakukan triknya (bisa oneliner / alias jika bukan sebenarnya saya membutuhkannya untuk bekerja dengan dan tanpa proxy).
sumber
Jadi, dalam praktiknya, jika Anda ingin mengkloning semua repo dari organisasi
FOO
yang cocokBAR
, Anda dapat menggunakan one-liner di bawah ini, yang memerlukan utilitas jq dan cli umum.sumber
Skrip shell lain dengan komentar yang mengkloning semua repositori (publik dan pribadi) dari pengguna:
sumber
Buat alias bash / func di file
~/.bashrc file
Saya menyelesaikan ini untuk tim saya dengan membuat alias / bash func di my
~/.bashrc file
Langkah
buka terminal atau shell linux dan buka
~/.bashrc file
:tambahkan fungsi ini:
simpan dan tutup flile ~ / .bashrc Anda dan kemudian tutup terminal - Anda perlu melakukan ini atau func baru tidak akan menginisialisasi:
buka terminal baru dan coba:
contoh : jika URL repo github pribadi Anda disebut https://github.com/awesome-async , perintahnya adalah
Penting
yang
per_page=200
pada akhir variabel pertamaORG_URL
menetapkan jumlah repo yang akan dikloning, sehingga membayar perhatian khusus untuk itu:Semoga ini membantu! :)
sumber
...repos?page=${2}&per_page=100";
Anda bisa mendapatkan daftar repositori dengan menggunakan
curl
dan kemudian mengulang daftar tersebut dengan loop bash:sumber
Anda dapat menggunakan alat open-source untuk mengkloning banyak repositori github: https://github.com/artiomn/git_cloner
Contoh:
git_cloner --type github --owner octocat --login user --password user https://my_bitbucket
Gunakan JSON API dari
api.github.com
. Anda dapat melihat contoh kode di dokumentasi github: https://developer.github.com/v3/Atau di sana:
https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py
sumber
Untuk mengkloning repo privat saja, diberi kunci akses, dan diberikan python 3 dan modul request yang dipasang:
sumber
Solusi Python3 yang menyertakan penomoran halaman lengkap melalui
Link
Header.Prasyarat:
pip3 install links-from-link-header
Kemudian, Anda dapat menggunakan
xargs
atau paralel dan:cat repolist | parallel -I% hub clone %
sumber
Jika Anda memiliki daftar repositori dalam daftar seperti ini, maka skrip shell ini berfungsi:
sumber
Saya membuat contoh skrip batch. Anda dapat mengunduh semua repositori pribadi / publik dari github.com. Setelah repositori diunduh, secara otomatis diubah menjadi file zip.
Catatan: file files.txt hanya boleh berisi nama repositori seperti:
sumber
Pembaruan dari 19 Mei
gunakan perintah bash ini untuk organisasi (termasuk repo pribadi)
sumber
Jawaban yang berlaku di sini tidak memperhitungkan bahwa Github API hanya akan mengembalikan maksimal 100 repositori terlepas dari apa yang Anda tentukan
per_page
. Jika Anda menggandakan organisasi Github dengan lebih dari 100 repositori, Anda harus mengikuti tautan halaman dalam respons API.Saya menulis alat CLI untuk melakukan hal itu :
Ini akan mengkloning semua repositori dalam
myorg
organisasi ke direktori kerja saat ini.sumber
Untuk organisasi yang Anda miliki aksesnya dengan repositori pribadi:
Ini menggunakan
html_url
, jadi Anda tidak perluaccess_token
hanya memasukkan kata sandi github Anda saat diminta.sumber
Gandakan semua repo Anda yang bukan merupakan garpu:
Kloning intisari Anda:
Ini
jq
perintah kompleks karena nama gists' repo ini adalah hash, sehingga perintah yang concatenates semua nama file menjadi nama repo iniAnda dapat memfilter JSON secara sewenang-wenang menggunakan
jq
Install:
sudo apt-get install jq
Dalam contoh di atas, saya memfilter garpu menggunakan ini:
curl ... | jq -r 'map(select(.fork == false))' ...
- berguna untuk tidak mengkloning repo tempat Anda membuat permintaan tarik biasajq mendukung beberapa fitur yang sangat canggih.
man jq
adalah temanmuAnda dapat mengautentikasi dengan
curl -u "username" ...
untuk mengakses repositori pribadiURL API Guthub
https://api.github.com/user/repos\?page\=1\&per_page\=100
https://api.github.com/users/other_username/repos\?page\=1\&per_page\=100
https://api.github.com/orgs/orgname/repos\?page\=1\&per_page\=100
Dokumen Github API untuk repositori
sumber
sumber
Untuk mengkloning semua repo pribadi dan publik Anda sendiri, sederhana buat token akses baru dengan akses repo dan gunakan ini:
(ganti dengan token akses dan nama pengguna Anda sendiri)
Ini akan mengkloning semua repo di folder saat ini
Ini adalah program bash kecil, Anda cukup menempelkannya di terminal dan tekan enter
sumber