গিটহাব থেকে কীভাবে একবারে সমস্ত রেডিও ক্লোন করবেন?


100

আমার একটি প্রতিষ্ঠান গিটহাব অ্যাকাউন্ট রয়েছে এবং আমি অটোমেশনের প্রয়োজনে তৈরি হওয়া নতুন যে কোনও কিছুর জন্য অ্যাকাউন্টিংয়ের মধ্যেই সমস্ত সংগ্রহস্থলের মধ্যে ব্যাকআপ রাখতে চাই। আমি এরকম কিছু আশা করছিলাম:

git clone git@github.com:company/*.git 

বা অনুরূপ কাজ করবে, তবে সেখানে ওয়াইল্ডকার্ডটি পছন্দ করবে বলে মনে হয় না।

গিটকে ক্লোন করার কোনও উপায় আছে এবং তারপরে উপযুক্ত অনুমতি রয়েছে বলে ধরে নিয়ে সমস্ত কিছু টানুন?


4
ভাল প্রশ্ন. এবং কীভাবে এগুলিকে সিঙ্কে রাখার বিষয়ে? উত্তরগুলির কোনও কি টানে কাজ করে?
নীলামাকবি 17'15

আমাদের একটি অজগর সমাধান দরকার, আমাদের মধ্যে যারা নোড বা রুবি তেমন পারদর্শী নয়;) বা গিথুবকে এটি পড়তে হবে এবং আমাদের প্রতি করুণা করা উচিত এবং এর জন্য কেবল একটি সাধারণ ওয়েব ইন্টারফেস সরবরাহ করা উচিত ....
নীলামকবি

চেষ্টা করুন: github.com/wballard/git-friends
কেনারব

উত্তর:


53

আমি মনে করি না যে এটি সেভাবে করা সম্ভব। আপনার সেরা বেট হ'ল API ব্যবহার করে একটি সংস্থার সংগ্রহস্থলের তালিকার সন্ধান এবং লুপ করা op

এটা চেষ্টা কর:

  • অ্যাকাউন্ট সেটিংস -> অ্যাপ্লিকেশনগুলিতে গিয়ে একটি এপিআই টোকেন তৈরি করুন
  • কল করুন: http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
  • প্রতিক্রিয়া হবে একটি JSON অ্যারে অবজেক্ট। প্রতিটি বস্তুর মধ্যে সেই সংস্থার অধীনে থাকা কোনও সংগ্রহস্থলের তথ্য অন্তর্ভুক্ত থাকবে। আমি মনে করি আপনার ক্ষেত্রে, আপনি ssh_urlসম্পত্তিটির জন্য বিশেষভাবে সন্ধান করবেন ।
  • তারপরে git cloneযারা ssh_urlএস।

এটি কিছুটা অতিরিক্ত কাজ, তবে গিটহাবের পক্ষে যথাযথ প্রমাণীকরণ থাকা প্রয়োজন।


আমি এপিআই টোকেন তৈরি করেছি এবং আমি কলটি থেকে আউটপুট পাচ্ছি, তবে আমাদের সংগ্রহস্থলগুলি বা 'ssh_url' স্ট্রিং সম্পর্কে আমি কী জানি তা উল্লেখ করার মতো কিছুই দেখতে পাচ্ছি না। আমি সন্দেহ করি যে আমি কলটি সঠিকভাবে করিনি। curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
numb3rs1x

এটি কি একটি গিটহাব এন্টারপ্রাইজ অ্যাকাউন্ট, বা github.com?
থমাস কেলি

4
আহ, আমি আপনাকে ভুল বুঝেছি। আমি ভেবেছিলাম এটি এন্টারপ্রাইজ অ্যাকাউন্ট। পরিবর্তে https://github.com/api/v3/, চেষ্টা করুন https://api.github.com/
টমাস কেলি

4
এবং আমি নিশ্চিত না যে আপনার নির্দিষ্ট সংস্থাটি কীভাবে সেট আপ করা হয়েছে, তবে যদি এটি "সংস্থার" পরিবর্তে কোনও "ব্যবহারকারী" হয় তবে আপনি তার /users/${COMPANY}/reposপরিবর্তে পথটি ব্যবহার করতে চাইবেন /orgs/${COMPANY}/repos
টমাস কেলি

4
প্রতি গিটহাব: access_tokenক্যোয়ারী প্যারামিটার ব্যবহার করে হ'ল দয়া করে পরিবর্তে অনুমোদন HTTP শিরোনামটি ব্যবহার করুন । যদি এই টোকেনটি এমন কোনও অ্যাপ্লিকেশন ব্যবহার করে যা আপনার নিয়ন্ত্রণে রাখে না তবে সচেতন হন যে এটি এই অবমূল্যায়নের ফলে কাজ করা বন্ধ করতে পারে।
BogeyMan

116

উপর উইন্ডোজ এবং সব ইউনিক্স / লিনাক্স সিস্টেম, ব্যবহার গীত ব্যাশ বা অন্য কোন টার্মিনাল , প্রতিস্থাপন YOURUSERNAMEআপনার ব্যবহারকারীর নাম ও ব্যবহার দ্বারা:

CNTX={users|orgs}; NAME={username|orgname}; PAGE=1
curl "https://api.github.com/$CNTX/$NAME/repos?page=$PAGE&per_page=100" |
  grep -e 'git_url*' |
  cut -d \" -f 4 |
  xargs -L1 git clone
  • আপনার সমস্ত সংগ্রহস্থলগুলি ডাউনলোড করতে সেট করুন CNTX=usersএবং NAME=yourusername
  • আপনার প্রতিষ্ঠানের সমস্ত ভান্ডারগুলি ডাউনলোড করতে সেট করুন CNTX=orgsএবং NAME=yourorgname

সর্বাধিক পৃষ্ঠার আকার 100, সুতরাং আপনার সমস্ত সংগ্রহস্থল পেতে ( PAGEআপনি ডাউনলোড করতে চান কাঙ্ক্ষিত পৃষ্ঠা নম্বরটিতে সেট করুন) পেতে আপনাকে ডান পৃষ্ঠা নম্বরটি দিয়ে বেশ কয়েকবার কল করতে হবে ।

এখানে উপরের শেল স্ক্রিপ্টটি দেওয়া আছে: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e


4
খাঁটি বাশ সমাধান, সবচেয়ে সহজ। আপনার তথ্যের জন্য, এই ব্যাশ কোডটি প্রায় কোনও * নিক্স পরিবেশ, লিনাক্স, সাইগউইন, মিংডউতে কার্যকর করা যেতে পারে এবং অবশ্যই গিটব্যাশ উইচটি অন্যদের মতো একটি টার্মিনাল অনুকরণ।
এম

4
এটি সংস্থাগুলির সাথে কাজ করে না, সুতরাং এটি সরাসরি প্রশ্নের উত্তর দেয় না। কেনোরবের এই উত্তরটি orgs পরিচালনা করে এবং 1000 টি পর্যন্ত রেপোও কাজ করে - আমার জন্য আরও ভাল কাজ করেছে।
রিচভেল

4
প্রমাণীকরণ সহ: curl " api.github.com/$CNTX/$NAME/… " | grep -e 'git_url *' | কাট-ডি \ "-ফ 4 | xargs -L1 গিট ক্লোন
ইয়্যানিক

4
দয়া করে উত্তরটি আপডেট করুন (ফেব্রুয়ারী -২০১৮): গিটহাব এপিআই v3 অনুসারে আপনার কার্লটি / orgs / ORGNAME / repos এ যাওয়া উচিত। এছাড়াও সম্ভবত API v3- এর একটি লিঙ্ক অন্তর্ভুক্ত করুন: developer.github.com/v3 এছাড়াও ব্যক্তিগত ভাণ্ডারগুলির জন্য আপনাকে curl -u "ব্যবহারকারীর নাম" যুক্ত করতে হবে, তারপরে কার্ল একবার আপনাকে পাসওয়ার্ড জানতে চাইবে। অন্যথায় দুর্দান্ত কাজ! :)))
দিমিত্রি শেভকপলিয়াস

4
Dimitry hevkoplyas মন্তব্য থেকে আপডেট stackoverflow.com/questions/19576742/... । বিকাশ করার চেষ্টা করলে ডেভেলপার.github.com/v3 301 স্থিতি ফেরত দেয়। এই বাশ কমান্ডটি curl -u "{ব্যবহারকারীর নাম ap " " api.github.com/orgs {org} / repos? পৃষ্ঠা = 1 & প্রতি_পেজ = 100" ব্যবহার করুন | grep -o 'git @ [^ "] *' | xargs -L1 গিট ক্লোনটি 100% কাজ করে
টমি

45

সংস্থার সংগ্রহস্থল

আপনার সংস্থার সমস্ত রেপো ক্লোন করতে, নীচের শেলটি ওয়ান-লাইনার ব্যবহার করে দেখুন:

GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone

ব্যবহারকারীর সংগ্রহস্থল

গিট সংগ্রহস্থল URL গুলি ব্যবহার করে সমস্ত ক্লোনিং করা হচ্ছে:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone

ক্লোন ইউআরএল ব্যবহার করে সমস্ত ক্লোন করা:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone

এখানে দরকারী শেল ফাংশন যা ব্যবহারকারীর স্টার্টআপ ফাইলগুলিতে যুক্ত হতে পারে ( curl+ ব্যবহার করে jq):

# Usage: gh-clone-user (user)
gh-clone-user() {
  curl -sL "https://api.github.com/users/$1/repos?per_page=1000" | jq -r '.[]|.clone_url' | xargs -L1 git clone
}

ব্যক্তিগত সংগ্রহস্থল

আপনার যদি ব্যক্তিগত রেপো ক্লোন করার প্রয়োজন হয় তবে আপনি নিজের শিরোনামে যেমন অনুমোদনের টোকেন যুক্ত করতে পারেন:

-H 'Authorization: token <token>'

বা পরম এ পাস করুন ( ?access_token=TOKEN), উদাহরণস্বরূপ:

curl -s "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN&per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone

মন্তব্য:

  • কেবলমাত্র ব্যক্তিগত সংগ্রহস্থল আনতে, type=privateআপনার ক্যোয়ারী স্ট্রিংয়ের সাথে যুক্ত করুন।
  • অন্য উপায়টি হল hubআপনার এপিআই কীটি কনফিগার করার পরে ব্যবহার করা।

আরো দেখুন:


ইঙ্গিতগুলি :
- গতি বাড়াতে, ( = 4 প্রসেস) এর -Pজন্য প্যারামিটার নির্দিষ্ট করে সমান্তরাল প্রক্রিয়াগুলির সংখ্যা নির্ধারণ করুন । xargs-P4
- আপনার যদি গিটহাব সীমা বাড়াতে হয়, আপনার এপিআই কী নির্দিষ্ট করে প্রমাণীকরণের চেষ্টা করুন।
- --recursiveনিবন্ধিত সাবমোডিয়ুলগুলিতে পুনরাবৃত্তি যুক্ত করুন এবং এর মধ্যে কোনও নেস্টেড সাবমডিউল আপডেট করুন।


4
প্রতি_পেজ = 1000 সর্বোচ্চ 100 এ আউট
এহেল্ক

20

এই সূচনাটি কমান্ড লাইনের এক লাইনে কাজটি সম্পাদন করে:

curl -s https://api.github.com/orgs/[your_org]/repos?per_page=200 | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

[your_org]আপনার প্রতিষ্ঠানের নাম দিয়ে প্রতিস্থাপন করুন । এবং per_pageপ্রয়োজনে আপনার সেট করুন ।

হালনাগাদ:

যেমন অ্যাটিউটারমি উল্লেখ করেছেন, গিটহাব ডক্স অনুসারে সর্বাধিক পৃষ্ঠার আকার 100 হবে ।

আপনার যদি 100 টিরও বেশি রেপো থাকে, আপনাকে আপনার ইউআরএলে একটি pageপ্যারামিটার যুক্ত করতে হবে এবং আপনি প্রতিটি পৃষ্ঠার জন্য কমান্ড চালাতে পারেন।

curl -s "https://api.github.com/orgs/[your_org]/repos?page=2&per_page=100" | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

দ্রষ্টব্য: ডিফল্ট per_pageপ্যারামিটারটি 30


আপনার অ্যাক্সেস রয়েছে এমন প্রাইভেট রেপোসের জন্য কীভাবে এটি করা হয় তার কোনও ধারণা?
মাইকেলগফ্রন

দ্বিতীয়টি এম্পারস্যান্ডের কারণে কাজ করে না কারণ এটি একটি পটভূমির কাজে চলে যায়
স্ল্যাশডটটিয়ার

আমি ইউআরএলে & অ্যাক্সেস_ টোকেন = <my_access_token> যুক্ত করেছি এবং এটি পুরোপুরি কাজ করেছে
rmartinus

দ্বিতীয় এক: পৃষ্ঠা = 1 (!)
ইয়্যানিক উর্ম

5

অ্যাকাউন্ট সেটিংসে যান -> অ্যাপ্লিকেশন এবং একটি API কী তৈরি করুন
তারপরে নীচের স্ক্রিপ্টে API কী, গিথুব ইনস্ট্যান্স url, এবং সংস্থার নাম sertোকান

#!/bin/bash

# Substitute variables here
ORG_NAME="<ORG NAME>"
ACCESS_TOKEN="<API KEY>"
GITHUB_INSTANCE="<GITHUB INSTANCE>

URL="https://${GITHUB_INSTANCE}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}"

curl ${URL} | ruby -rjson -e 'JSON.load(STDIN.read).each {|repo| %x[git clone #{repo["ssh_url"]} ]}'

ফাইলটিতে ফাইল সংরক্ষণ chmod u+xকরুন, তারপরে এটি চালান।

রুবি কোডের জন্য আরনাউডকে ধন্যবাদ ।


5

সুতরাং, আমি আমার উত্তরও যুক্ত করব। :) (আমি এটি সহজ পেয়েছি)

আনার তালিকা (আমি "ম্যাজেন্টো" সংস্থা ব্যবহার করেছি):

curl -si https://api.github.com/users/magento/repos | grep ssh_url | cut -d '"' -f4

clone_urlপরিবর্তে ssh_urlHTTP অ্যাক্সেস ব্যবহার করুন ।

সুতরাং, আসুন তাদের সমস্ত ক্লোন করা যাক! :)

curl -si https://api.github.com/users/magento/repos | \
    grep ssh_url | cut -d '"' -f4 | xargs -i git clone {}

আপনি যদি ব্যক্তিগত রেপো আনতে চলেছেন - কেবল GET প্যারামিটার যুক্ত করুন ?access_token=YOURTOKEN


4

আমি দেখেছি একটি মন্তব্য সারকথা বিশেষ করে, কারণ মূল পোস্টার মত, আমি দ্রুত অ্যাক্সেসের জন্য সব Repos তবে যা বেশীরভাগ ব্যক্তিগত ছিল সিঙ্ক করতে চেয়েছিলেন, খুব সহায়ক হতে প্রদান করা @seancdavis।

curl -u [[USERNAME]] -s https://api.github.com/orgs/[[ORGANIZATION]]/repos?per_page=200 |
  ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

আপনার গিথুব ব্যবহারকারীর নাম এবং [[ORGANIZATION]] আপনার গিথুব সংস্থার সাথে [[USERNAME]] প্রতিস্থাপন করুন। আউটপুট (জেএসএন রেপো মেটাডেটা) একটি সাধারণ রুবি স্ক্রিপ্টে পাঠানো হবে:

# bring in the Ruby json library
require "json"

# read from STDIN, parse into ruby Hash and iterate over each repo
JSON.load(STDIN.read).each do |repo|
  # run a system command (re: "%x") of the style "git clone <ssh_url>"
  %x[git clone #{repo["ssh_url"]} ]
end

4
এই সমাধানটি আমার পক্ষে নিখুঁতভাবে কাজ করেছিল। আসলে আমার যা দরকার তা হ'ল আমার ব্যক্তিগত অ্যাকাউন্টের রেপোগুলি আমার নতুন স্থানীয় মেশিনে ক্লোন করা। নতুন ওয়ার্কস্টেশন স্থাপনের জন্য খুব সুবিধাজনক। দ্রষ্টব্য: এটি করতে আমাকে পরিবর্তন .../orgs/[[organization]]/repos...করতে হয়েছিল .../users/[[username]]/repos...। এখন আমি আমার সমস্ত কাজ দ্রুত স্থানীয় মেশিনে আমদানি করতে পারি। ধন্যবাদ!
বি। বুলেটপেট


2

এই অজগরটি ওয়ান-লাইনার আপনার যা প্রয়োজন তা করবে। এটি:

  • আপনার উপলব্ধ রেপোর জন্য গিথুব পরীক্ষা করে
  • প্রতিটি জন্য, একটি সিস্টেম কল করে git clone

    python -c "import json, urllib, os; [os.system('git clone ' + r['ssh_url']) for r in json.load(urllib.urlopen('https://api.github.com/orgs/<<ORG_NAME>>/repos?per_page=200'))]"
    

2
curl -s https://api.github.com/orgs/[GITHUBORG_NAME]/repos | grep clone_url | awk -F '":' '{ print $2 }' | sed 's/\"//g' | sed 's/,//' | while read line; do git clone "$line"; done

4
আপনার সমাধানে একটি ব্যাখ্যা যোগ করুন। এই জাতীয় সমস্যাযুক্ত অন্যান্য ব্যক্তিরা আপনার সমাধান আরও সহজে বুঝতে পারবেন!
নান্দার স্পিডসট্রা

একটি বিশদটি হ'ল পাস পৃষ্ঠা নম্বরটি দরকার ?page=2
ব্রুনো

2

সহজ সমাধান:

NUM_REPOS=1000
DW_FOLDER="Github_${NUM_REPOS}_repos"
mkdir ${DW_FOLDER}
cd ${DW_FOLDER}
for REPO in $(curl https://api.github.com/users/${GITHUB_USER}/repos?per_page=${NUM_REPOS} | awk '/ssh_url/{print $2}' | sed 's/^"//g' | sed 's/",$//g') ; do git clone ${REPO} ; done

2

আমি উপরের কয়েকটি কমান্ড এবং সরঞ্জাম চেষ্টা করেছি, কিন্তু সিদ্ধান্ত নিয়েছি যে তারা খুব বেশি ঝামেলা করছে, তাই আমি এটি করার জন্য একটি আর একটি কমান্ড-লাইন সরঞ্জাম লিখেছিলাম, যাকে বলা হয় github-dl

এটি ব্যবহার করার জন্য (ধরে নিলে আপনার নোডেজ ইনস্টল করা আছে)

npx github-dl -d /tmp/test wires

এটি সিএলআই-তে প্রদত্ত অনুমোদনের বিশদ (ব্যবহারকারীর / পাস) ব্যবহার করে ডিরেক্টরিতে সমস্ত রেপোগুলির একটি তালিকা wiresএবং তথ্য লেখবে writetest

বিস্তারিত, এটি

  1. প্রমাণের জন্য জিজ্ঞাসা (2 এফএ সমর্থন করে)
  2. গিথুব API এর মাধ্যমে ব্যবহারকারী / org এর জন্য রেপোগুলির তালিকা পান G
  3. এর জন্য পৃষ্ঠাগুলি রয়েছে তাই 100 টিরও বেশি রেপো সমর্থিত

এটি আসলে रिपোস ক্লোন করে না, পরিবর্তে এমন একটি .txtফাইল লিখুন যা আপনি xargsক্লোনিংয়ের জন্য পাস করতে পারেন , উদাহরণস্বরূপ:

cd /tmp/test
cat wires-repo-urls.txt | xargs -n2 git clone

# or to pull
cat /tmp/test/wires-repo-urls.txt | xargs -n2 git pull

হতে পারে এটি আপনার জন্য দরকারী; এটি জেএসের কয়েকটি লাইন যাতে আপনার প্রয়োজনের সাথে সামঞ্জস্য করা সহজ হওয়া উচিত


1

এটি করার জন্য একটি খুব দরকারী এনপিএম মডিউলও রয়েছে । এটি কেবল ক্লোন করতে পারে না, পাশাপাশি টানতে পারে (আপনার কাছে ইতিমধ্যে থাকা ডেটা আপডেট করতে)।

আপনি ঠিক এইরকম কনফিগারেশন তৈরি করেন:

[{
   "username": "BoyCook",
   "dir": "/Users/boycook/code/boycook",
   "protocol": "ssh"
}]

এবং gitall cloneউদাহরণস্বরূপ করুন। বাgitall pull


1

যদি কেউ উইন্ডোজ সমাধানের সন্ধান করেন, কৌশলটি করতে এখানে পাওয়ারশেলের একটি সামান্য ফাংশন রয়েছে (প্রকৃতপক্ষে এবং প্রক্সি ছাড়াই উভয় কাজ করার প্রয়োজন যদি না হয় তবে এটি অনিলাইনার / ওরফে হতে পারে)।

function Unj-GitCloneAllBy($User, $Proxy = $null) {
    (curl -Proxy $Proxy "https://api.github.com/users/$User/repos?page=1&per_page=100").Content 
      | ConvertFrom-Json 
      | %{ $_.clone_url } 
      # workaround git printing to stderr by @wekempf aka William Kempf
      # https://github.com/dahlbyk/posh-git/issues/109#issuecomment-21638678
      | %{ & git clone $_ 2>&1 } 
      | % { $_.ToString() }
}

1

সুতরাং, বাস্তবে , আপনি যদি FOOমিলছে এমন সংস্থার সমস্ত রেপো ক্লোন করতে চান তবে BARনীচের ওয়ান- লাইনারটি ব্যবহার করতে পারেন, যার জন্য জেউ এবং সাধারণ ক্লাইম ইউটিলিটিগুলি দরকার

curl 'https://api.github.com/orgs/FOO/repos?access_token=SECRET' |
  jq '.[] |
  .ssh_url' |
  awk '/BAR/ {print "git clone " $0 " & "}' |
  sh

1

মন্তব্যগুলির সাথে আরও একটি শেল স্ক্রিপ্ট যা কোনও ব্যবহারকারীর সমস্ত ভান্ডার (সরকারী এবং ব্যক্তিগত) ক্লোন করে:

#!/bin/bash

USERNAME=INSERT_USERNAME_HERE
PASSWORD=INSERT_PASSWORD_HERE

# Generate auth header
AUTH=$(echo -n $USERNAME:$PASSWORD | base64)

# Get repository URLs
curl -iH "Authorization: Basic "$AUTH https://api.github.com/user/repos | grep -w clone_url > repos.txt

# Clean URLs (remove " and ,) and print only the second column
cat repos.txt | tr -d \"\, | awk '{print $2}'  > repos_clean.txt

# Insert username:password after protocol:// to generate clone URLs
cat repos_clean.txt |  sed "s/:\/\/git/:\/\/$USERNAME\:$PASSWORD\@git/g" > repos_clone.txt

while read FILE; do
    git clone $FILE
done <repos_clone.txt

rm repos.txt & rm repos_clone.txt

1

আপনার মধ্যে একটি বাশ ওরফে / ফানক তৈরি করুন ~/.bashrc file

এটি আমার নিজের মধ্যে একটি নাম / বাশ ফানক তৈরি করে আমার দলের জন্য সমাধান করেছি ~/.bashrc file

পদক্ষেপ

একটি টার্মিনাল বা লিনাক্স শেল খুলুন এবং আপনার ~/.bashrc file:

sudo nano ~/.bashrc

এই ফাংশন যুক্ত করুন:

CloneAll() {
    # Make the url to the input github organization's repository page.
    ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";

    # List of all repositories of that organization (seperated by newline-eol).
    ALL_REPOS=$(curl -s ${ORG_URL} | grep html_url | awk 'NR%2 == 0' \
                | cut -d ':' -f 2-3 | tr -d '",');

    # Clone all the repositories.
    for ORG_REPO in ${ALL_REPOS}; do
        git clone ${ORG_REPO}.git;
    done
}

আপনার। / .bashrc ফ্লাইলটি সংরক্ষণ করুন এবং বন্ধ করুন এবং তারপরে টার্মিনালটি বন্ধ করুন - আপনাকে এটি করতে হবে বা নতুন ফানকটি আরম্ভ করতে হবে না:

নতুন টার্মিনালটি খুলুন এবং এটি ব্যবহার করে দেখুন:

CloneAll <your_github_org_name>

উদাহরণ : যদি আপনার ব্যক্তিগত গিথুব রেপো ইউআরএলকে https://github.com/awesome-async বলা হয় তবে আদেশটি হ'ল

CloneAll awesome-async

গুরুত্বপূর্ণ

per_page=200প্রথম পরিবর্তনশীল শেষে ORG_URLRepos ক্লোন করা হবে তার সংখ্যা নির্ধারণ, যাতে বিশেষ মনোযোগ দিতে:

ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";  <---- make sure this is what you want

আশাকরি এটা সাহায্য করবে! :)


সর্বাধিক বলে মনে হচ্ছে প্রতি পৃষ্ঠার মান হ'ল 100 ... বৃহত্তর অর্গসের জন্য পৃষ্ঠার সংখ্যাটি ২ য় প্যারামিটার হিসাবে যুক্ত করা হয়েছে এবং এটি আমার প্রয়োজনের জন্য পুরোপুরি কাজ করে...repos?page=${2}&per_page=100";
sv3n

0

আপনি ব্যবহারের মাধ্যমে সংগ্রহস্থলের একটি তালিকা পেতে পারেন curlএবং তারপরে ব্যাশের লুপের সাহায্যে উল্লিখিত তালিকার পুনরাবৃত্তি করতে পারেন:

GIT_REPOS=`curl -s curl https://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN} | grep ssh_url | awk -F': ' '{print $2}' | sed -e 's/",//g' | sed -e 's/"//g'`
for REPO in $GIT_REPOS; do
  git clone $REPO
done

0

আপনি গিথুব সংগ্রহস্থলগুলির গুচ্ছ ক্লোন করতে ওপেন সোর্স সরঞ্জামটি ব্যবহার করতে পারেন: https://github.com/artiomn/git_cloner

উদাহরণ:

git_cloner --type github --owner octocat --login user --password user https://my_bitbucket

থেকে JSON API ব্যবহার করুন api.github.com। আপনি গিথুব ডকুমেন্টেশনে কোড উদাহরণ দেখতে পারেন: https://developer.github.com/v3/

বা সেখানে:

https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py


0

কেবলমাত্র প্রাইভেট রেপো ক্লোন করতে, একটি অ্যাক্সেস কী দেওয়া হয়েছে এবং অজগর 3 দেওয়া হয়েছে এবং মডিউল ইনস্টল করার অনুরোধ জানানো হয়েছে:

ORG=company; ACCESS_KEY=0000000000000000000000000000000000000000; for i in $(python -c "import requests; print(' '.join([x['ssh_url'] for x in list(filter(lambda x: x['private'] ,requests.get('https://api.github.com/orgs/$ORG/repos?per_page=1000&access_token=$ACCESS_KEY').json()))]))"); do git clone $i; done;

0

একটি পাইথন 3 সমাধান যা শিরোনামের মাধ্যমে সম্পূর্ণ পৃষ্ঠাগুলি অন্তর্ভুক্ত করে Link

প্রাক-প্রয়োজনীয়তা:


import json
import requests
from requests.auth import HTTPBasicAuth
import links_from_header

respget = lambda url: requests.get(url, auth=HTTPBasicAuth('githubusername', 'githubtoken'))

myorgname = 'abc'
nexturl = f"https://api.github.com/orgs/{myorgname}/repos?per_page=100"

while nexturl:
    print(nexturl)
    resp = respget(nexturl)

    linkheads = resp.headers.get('Link', None)
    if linkheads:
        linkheads_parsed = links_from_header.extract(linkheads)
        nexturl = linkheads_parsed.get('next', None)
    else:
        nexturl = None

    respcon = json.loads(resp.content)
    with open('repolist', 'a') as fh:
        fh.writelines([f'{respconi["full_name"]}\n' for respconi in respcon])

তারপরে, আপনি ব্যবহার করতে পারেন xargsবা সমান্তরাল এবং:cat repolist | parallel -I% hub clone %


0

আপনার যদি এর মতো তালিকায় সংগ্রহস্থলের তালিকা থাকে তবে এই শেল স্ক্রিপ্টটি কাজ করে:

user="https://github.com/user/"

declare -a arr=("repo1", "repo2")

for i in "${arr[@]}"

do

   echo $user"$i"

   git clone $user"$i"

done 

যদি কিছু ব্যক্তিগত সংগ্রহস্থল থাকে, আপনি "ব্যবহারকারী" এইভাবে আপডেট করতে পারবেন: ব্যবহারকারী = " ব্যবহারকারী: পাসওয়ার্ড
@github.com/user

0

আমি একটি নমুনা ব্যাচের স্ক্রিপ্ট তৈরি করেছি। আপনি github.com থেকে সমস্ত বেসরকারী / পাবলিক স্টোর সংগ্রহ করতে পারেন। একটি সংগ্রহস্থল ডাউনলোড হওয়ার পরে এটি স্বয়ংক্রিয়ভাবে একটি জিপ ফাইলে রূপান্তরিত হয়।

@echo off
setlocal EnableDelayedExpansion
SET "username=olyanren"
SET "password=G....."
set "mypath=%cd%\"
SET "url=https://%username%:%password%@github.com/%username%/"
FOR /F "tokens=* delims=" %%i in (files.txt) do (
SET repo=%%i
rmdir /s /q !repo!
git clone "!url!!repo!.git"
cd !repo!
echo !mypath!
git archive --format=zip -o "!mypath!!repo!.zip" HEAD
cd ..
)

দ্রষ্টব্য: ফাইল. txt ফাইলটিতে কেবলমাত্র সংগ্রহের নাম থাকতে হবে:

repository1
repository2

0

19 মে থেকে আপডেট

কোনও প্রতিষ্ঠানের জন্য এই বাশ কমান্ডটি ব্যবহার করুন (ব্যক্তিগত রেপো অন্তর্ভুক্ত)

curl -u "{username}" "https://api.github.com/orgs/{org}/repos?page=1&per_page=100" | grep -o 'git@[^"]*' | xargs -L1 git clone

0

এখানে প্রচলিত উত্তরগুলি বিবেচনায় নেবে না যে গিথুব এপিআই কেবলমাত্র সুনির্দিষ্টভাবে সুনির্দিষ্ট করে সত্ত্বেও সর্বোচ্চ 100 টি সংগ্রহস্থল ফেরত দেবে per_page। যদি আপনি 100 টিরও বেশি সংগ্রহস্থল নিয়ে একটি গিথুব org ক্লোনিং করে থাকেন তবে আপনাকে API প্রতিক্রিয়াতে পেজিং লিঙ্কগুলি অনুসরণ করতে হবে।

আমি এটি করার জন্য একটি সি এল এল সরঞ্জাম লিখেছিলাম :

clone-github-org -o myorg

এটি myorgবর্তমান কার্যনির্বাহী ডিরেক্টরিতে সংস্থার সমস্ত সংগ্রহশালা ক্লোন করবে ।


0

Orgs এর জন্য আপনার কাছে ব্যক্তিগত রেপো সহ অ্যাক্সেস রয়েছে:

curl -u <YOUR_GITHUB_USERNAME> -s https://api.github.com/orgs/<ORG_NAME>/repos?per_page=200 | ruby -rubygems -e ’require “json”; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo[“html_url”]} ]}'

এটি ব্যবহার করে html_url, সুতরাং আপনাকে access_tokenযখন অনুরোধ করা হয় তখন কেবল আপনার গিথব পাসওয়ার্ড প্রবেশ করার প্রয়োজন হয় না ।


4
এপিআই-তে একটি পাসওয়ার্ড ব্যবহার করে বেসিক প্রমাণীকরণ বাতিল করা হয়েছে এবং শীঘ্রই আর কাজ করবে না। প্রস্তাবিত কাজের ক্ষেত্র এবং অপসারণের তারিখগুলি সম্পর্কে আরও তথ্যের জন্য [অবচয়-পাসওয়ার্ড-প্রমাণীকরণ] ( ডেভেলপার. github.com/changes/… ) দেখুন।
বুগেইমান

0

কাঁটা নয় এমন সমস্ত আপনার রেপো ক্লোন করুন:

curl -u "username" https://api.github.com/user/repos\?page\=1\&per_page\=100 |
  jq -r 'map(select(.fork == false)) | .[] | .ssh_url' |
  xargs -L1 git clone

আপনার গিস্ট ক্লোন করুন:

curl https://api.github.com/users/username/gists\?page\=1\&per_page\=100 |
   jq -r ".[] | .git_pull_url +\" '\" + (.files|keys|join(\"__\") + \"'\")" |
   xargs -L1 git clone

এই jqকমান্ডটি জটিল কারণ গিস্টগুলির রেপোর নাম হ্যাশগুলি হ'ল, যাতে আদেশটি সমস্ত ফাইলের নামটিকে রেপোর নাম হিসাবে সম্মতি দেয়


আপনি JSON ইচ্ছামত ব্যবহার করে ফিল্টার করতে পারেন jq

ইনস্টল করুন: sudo apt-get install jq

উপরের উদাহরণে, আমি এটি ব্যবহার করে কাঁটাচাঁকগুলি ফিল্টার করে ফেলেছি : curl ... | jq -r 'map(select(.fork == false))' ...- রেপো ক্লোনিং না করার জন্য দরকারী যেখানে আপনি ক্যাজুয়াল পুলের অনুরোধ করেছেন

জকিউ কিছু খুব উন্নত বৈশিষ্ট্য সমর্থন করে। man jqতোমার বন্ধু


আপনি ব্যক্তিগত ভাণ্ডার অ্যাক্সেস সহ অনুমোদন করতে পারেনcurl -u "username" ...


গুথুবের এপিআই url

  • আপনার repos (প্রমাণীকরণ প্রয়োজন): 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

Repos জন্য Github API ডক্স


0
"""
Clone all public Github Repos

https://developer.github.com/v3/repos/#list-repositories-for-a-user
"""

import urllib.request, base64
import json
import os


def get_urls(username):
    url = f"https://api.github.com/users/{username}/repos?per_page=200"
    request = urllib.request.Request(url)
    result = urllib.request.urlopen(request)
    return json.load(result)


if __name__ == "__main__":
    for r in get_urls("MartinThoma"):
        if not os.path.isdir(r["name"]):
            print(f"Clone {r['name']}...")
            os.system("git clone " + r["ssh_url"])
        else:
            print(f"SKIP {r['name']}...")

0

আপনার নিজস্ব সমস্ত ব্যক্তিগত এবং পাবলিক রেপো ক্লোন করতে সহজ সরলতার সাথে অ্যাক্সেসের সাথে একটি নতুন অ্যাক্সেস টোকেন তৈরি করে এবং এটি ব্যবহার করুন:

(আপনার নিজস্ব অ্যাক্সেস টোকেন এবং ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন)

for line in $(curl https://api.github.com/user/repos?access_token=ACCESS_TOKEN_HERE  | grep -o "git@github.com:YOUR_USER_NAME/[^ ,\"]\+");do git clone $line;done

এটি বর্তমান ফোল্ডারে সমস্ত রেপো ক্লোন করবে

এটি একটি সামান্য বাশ প্রোগ্রাম, আপনি কেবল এটি টার্মিনালে পেস্ট করতে পারেন এবং এন্টার টিপুন


0

আপনি গিটহাব আর্কাইভের মতো একটি সরঞ্জাম ব্যবহার করতে পারেন যা আপনাকে সরল এবং ব্যক্তিগত ব্যক্তিগত রেপোগুলি, সংস্থার রেপোগুলিকে ক্লোন করতে / টানতে দেয় এবং একসাথে একটি সাধারণ সরঞ্জামের সাহায্যে দেখতে পারে।

অটোমেশনের ক্ষেত্রে, আপনি উদাহরণস্বরূপ দিনে একবার বা সপ্তাহে একবার চালনার জন্য গিটহাব সংরক্ষণাগার স্থাপন করতে পারেন এবং এটি ক্লোনযুক্তদের এড়িয়ে যায় এবং শেষ বারের পরে এটি অন্য সকলের দ্বারা চালিত হওয়ার পরে নতুন পরিবর্তনগুলিতে টানতে পারে।

সূত্র: https://github.com/Justintime50/github-archive

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.