এক কমান্ডের সাহায্যে সমস্ত গিট রিমোটগুলিতে চাপ দিতে সক্ষম?


195

পরিবর্তে:

git push origin --all && git push nodester --all && git push duostack --all

কেবল একটি আদেশ দিয়ে তা করার কোনও উপায় আছে কি?

ধন্যবাদ :)



allআপনার সমস্ত রিমোটগুলিতে চাপ দেওয়ার জন্য একটি রিমোট তৈরি করতে দেখুন: stackoverflow.com/a/18637593/802365
লোপেজ

উত্তর:


253

সমস্ত শাখা সমস্ত রিমোটে ঠেলাতে:

git remote | xargs -L1 git push --all

বা আপনি যদি সমস্ত প্রত্যন্ত অঞ্চলে একটি নির্দিষ্ট শাখাটি ঠেলাতে চান:

masterআপনি যে শাখাটি ধাক্কা দিতে চান তা দিয়ে প্রতিস্থাপন করুন ।

git remote | xargs -L1 -I R git push R master

(বোনাস) কমান্ডটির জন্য একটি গিফ উরফ তৈরি করতে:

git config --global alias.pushall '!git remote | xargs -L1 git push --all'

চলমান git pushallএখন সমস্ত শাখা সমস্ত রিমোটে ঠেলে দেবে।


1
খুব ভাল এবং সহজ সমাধান। বিটিডাব্লু আপনি -L 1 এর পরিবর্তে xargs -l ব্যবহার করতে পারেন, -l বিকল্পটি -L 1 এর সমান। এছাড়াও, কখনও কখনও আমি গিট পুশ-এ সমস্ত যোগ করি। গিট রিমোট | xargs -l গিট পুশ
টনি

2
আমি xargs: illegal option -- lওএসএক্সে উঠি । এটি চিত্রিত, আপনার প্রয়োজনgit remote | xargs -L1 git push
বালুপটন

4
গিট আপনাকে সেই কলটি একটি কাস্টম কমান্ড করতে দেয়। এটি কেবল একটি ফাইলের মধ্যে রাখুন যে 1) আপনার পথে রয়েছে, 2) আপনার কাছে "গিট- [কাস্টম নাম]" (যেমন গিট-ফু, গিট-পুশ-সব) নামক অনুমতি রয়েছে এবং 3) কেবল "গিট [কাস্টম নাম]" টাইপ করতে সক্ষম হোন (যেমন গিট ফু, গিট পুশ সব))
অ্যান্ড্রু মার্টিন

2
টনি অন উবুন্টু man xargsবলেছেন, বিকল্পটি -lপিওআইএসএক্স-তে অনুপযুক্ত না হওয়ায় তা হ্রাস করা হয়েছে।
wjandrea

2
@kyb ইন গিট ওরফে সিনট্যাক্স, এর !অর্থ নিম্নলিখিতটি কোনও অভ্যন্তরীণ গিট কমান্ড নয়, তবে একটি বাহ্যিক শেল কমান্ড।
দুর্বল করুন

285

allএর নামে বেশ কয়েকটি রেপো URL সহ একটি রিমোট তৈরি করুন :

git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git

তারপর ঠিক git push all --all


এটি এটিকে এভাবে দেখায় .git/config:

  [remote "all"]
  url = origin-host:path/proj.git
  url = nodester-host:path/proj.git
  url = duostack-host:path/proj.git

5
সুপার শীতল কৌশল! একমাত্র অসুবিধা হ'ল এটি দূরবর্তী মাথাগুলিকে সরায় না। এই git fetch --allধরণের ধাক্কা দেওয়ার পরে আপনার ঠিক চালানো দরকার ।
ম্যাডহেড

8
মিঃ টরভাল্ডস (গিতের স্রষ্টা) উল্লেখ করেছেন যে তিনি এই পদ্ধতিটি ব্যবহার করেছেন তবে তিনি বলেছেন যে এটি কেবল সুবিধার জন্য এবং কোনও প্রযুক্তিগত সুবিধা দেয় না marc.info/?l=git&m=116231242118202&w=2 "এবং শেষে, এমনকি" একাধিক ভাণ্ডারগুলিতে ধাক্কা খাওয়া সমস্ত "গিট পুশ" আসলে প্রতিটি সংগ্রহস্থলের জন্য একবার সংযোগ স্থাপন করবে, সুতরাং এটি একাধিক "গিট পুশ" এস করার জন্য কেবল সংক্ষিপ্তরূপ। কোনও বাস্তব প্রযুক্তিগত সুবিধা নেই, কেবল একটি সুবিধা ""
ম্যাট

14
এই পদ্ধতির সাথে একটি সমস্যা হ'ল এটি allউপলব্ধ হওয়ার সাথে সাথে আপনাকে রিমোটে নতুন ইউআরএল যুক্ত করতে git remote | xargs -L1 git push --allহবে , যেখানে স্বয়ংক্রিয়ভাবে কোনও নতুন রিমোট বেছে নেওয়া হবে।
রাফি খ্যাচাডৌড়িয়ান

2
পরামর্শ: আপনি allযখনই কোন কমিট পাঠান তখনই টাইপিংয়ের প্রয়োজন নেই , "সমস্ত" এর পরিবর্তে "উত্স" ব্যবহার করুন:git remote set-url --add origin nodester-host:path/proj.git
ম্যাকাবিয়াস

পুশ ইউআরএল সেট করতে ভুলে গেছেন অন্যথায় git pushসমস্ত url আপডেট করবে না update উত্তর অনুসারে আপডেট হয়েছে
ব্যবহারকারী 3338098

88

আপনি যদি সর্বদা Repo1, repo2, এবং repo3 এ চাপতে চান তবে সর্বদা কেবল রেপো 1 থেকে টানতে চান তবে দূরবর্তী 'উত্স' হিসাবে সেট করুন

[remote "origin"]
    url = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo2
    pushurl = https://exampleuser@example.com/path/to/repo3
    fetch = +refs/heads/*:refs/remotes/origin/*

কমান্ড লাইনে কনফিগার করুন:

$ git remote add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo2
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo3

আপনি যদি কেবল এখান থেকে টানতে চান repo1তবে একটি নির্দিষ্ট শাখায়repo1 এবং repo2 জন্যspecialBranch চাপ দিন :

[remote "origin"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[remote "specialRemote"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[branch "specialBranch"]
    remote = origin
    pushRemote = specialRemote
    ...

Https://git-scm.com/docs/git-config#git-config-branchltnamegtremote দেখুন ।


4
আমি নিশ্চিত নই কেন এটি বেশি ভোট পেল না। এটি আসলেই সুবিধাজনক কারণ এটি আপনাকে git pushকোনও যুক্তি ছাড়াই কেবল একটি করার অনুমতি দেয় ।
হুস্কি

1
আমাকে ভোট দিন, দয়া করে!
মেং লু

1
এটি আমার কাছে এটি করার উপযুক্ত উপায় বলে মনে হয়। সর্বাধিক ভোট পাওয়া উচিত ছিল।
আহমাদ

এটা খুব দরকারী। কেবল মাস্টার শাখায় পুশুরল সীমাবদ্ধ করা কি সম্ভব?
fbucek

17

.Git / কনফিগারেশন ফাইল সম্পাদনার বিকল্প হিসাবে আপনি নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন:

# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git

এখানে একই git push all --allকাজ করে।

আপনি উত্তর # 1 হিসাবে একই সম্পন্ন করেছেন। আপনি এটি কনফিগার ফাইলের কাঁচা সম্পাদনার পরিবর্তে কমান্ড লাইনের সাহায্যে সম্পন্ন করেছেন।


2

আমি একটি কলে অনেক রিমোটগুলিকে ঠেলাতে একটি সংক্ষিপ্ত বাশ ফাংশন লিখেছিলাম। আপনি একটি একক দূরবর্তীকে প্যারামিটার হিসাবে নির্দিষ্ট করতে পারেন, একাধিক রিমোটগুলি স্পেস দ্বারা পৃথক করে দিতে পারেন বা এটির সমস্ত দূরবর্তী স্থানে চাপ দেওয়ার জন্য কোনও নির্দিষ্ট করতে পারবেন না।

এটি আপনার .bashrc বা .bash_profile এ যুক্ত করা যেতে পারে।

function GitPush {
  REMOTES=$@

  # If no remotes were passed in, push to all remotes.
  if [[ -z "$REMOTES" ]]; then
    REM=`git remote`

    # Break the remotes into an array
    REMOTES=$(echo $REM | tr " " "\n")
  fi

  # Iterate through the array, pushing to each remote
  for R in $REMOTES; do
    echo "Pushing to $R..."
    git push $R
  done
}

উদাহরণ: ধরা যাক আপনার রেপোতে 3 টি রিমোট রয়েছে: রিম 1, রিম 2 এবং রিম 3।

# Pushes to rem1
GitPush rem1

# Pushes to rem1 and rem2
GitPush rem1 rem2

# Pushes to rem1, rem2 and rem3
GitPush

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