গিট পুশ শাখা এক দূর থেকে অন্য দূরবর্তী?


133

আমি নিম্নলিখিত রিমোটগুলি সেট আপ করেছি:

$ git remote 
korg
rorg

এবং নিম্নলিখিত শাখা:

$ git branch -a
* (no branch)
  remotes/korg/gingerbread
  remotes/korg/gingerbread-release
  remotes/korg/honeycomb
  remotes/korg/honeycomb-mr1-release
  remotes/korg/master
  remotes/m/android-2.3.3_r1 -> refs/tags/android-2.3.3_r1a
  remotes/m/gingerbread -> korg/gingerbread

এখন আমি থেকে সমস্ত দূরবর্তী শাখা ধাক্কা করতে ইচ্ছুক korgথেকে rorgদূরবর্তী। আমি কেমন করে ঐটি করি?

প্রথমত প্রত্যেকের জন্য স্থানীয় শাখা তৈরি না করে, যদি তা এড়ানো যায়।


আমি অনুমান করছি যে এটির উত্তরটির তুলনায় আপনি এই উত্তরটির উত্তর তুলনা করতে পারেন: স্ট্যাকওভারফ্লো / প্রশ্ন / 6922700/…
লেগোলাস

উত্তর:


52

কিছু অস্থায়ী সংগ্রহস্থল তৈরির একটি দ্রুত পরীক্ষা আপনাকে দেখায় যে আপনি এমন একটি রিসপেক তৈরি করতে পারেন যা এটি করতে পারে:

$ git push rorg origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
 * [new branch]      origin/one -> one

সুতরাং উত্স / BRANCHNAME: রেফ / মাথা / BRANCHNAME

আমার rorgরিমোটে পরীক্ষা করা হচ্ছে :

pat@host /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a

5
পরিবর্তে git push rorg origin/one:one(ছাড়া refs/heads/) কেন নয় ?
আলী

2
@ প্রকৃত কারণ refs/heads/প্রিফিক্সের সাহায্যে আপনি দূরবর্তী শাখাগুলিকে ঠেলে দিচ্ছেন যে কোনওone
МАЛИКОВ МАЛИКОВ

@ পেথহয়েটস আমি উল্লিখিত কমান্ডটি চেষ্টা করেছিলাম যা এটি আপ টু ডেট বলেছে, তবে আমার দূরবর্তী এতে 10 টি এবং রিমোট বিতে 6 টি শাখা রয়েছে তাই আপনি কি দয়া করে আমাকে বলতে পারেন যে আমি কীভাবে বামদিকের শাখাগুলি স্থানান্তর করতে পারি?
কেশব 1234

219

আমি এটি একটি পেয়েছি:

git push rorg 'refs/remotes/korg/*:refs/heads/*'

এবং এটি আমার সমস্ত দূরবর্তী শাখাগুলি কর্গ থেকে আরগারে ঠেলে দিয়েছে (এমনকি শাখাগুলির স্থানীয় অনুলিপি ছাড়াই)। নীচে আউটপুট দেখুন:

Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas:  11% (12/105)
To <<MY_REPOSITORY_URL>>
 * [new branch]      korg/gingerbread-> gingerbread
 * [new branch]      korg/gingerbread-release -> gingerbread-release
 * [new branch]      korg/honeycomb-> honeycomb
 * [new branch]      korg/HEAD -> HEAD
 * [new branch]      korg/honeycomb-mr1-release-> honeycomb-mr1-release
 * [new branch]      korg/master -> master

এবং তারপরে আপনি tagsরেফগুলির জন্য একই ধাক্কা তৈরি করতে পারেন :

git push rorg 'refs/tags/*:refs/tags/*'

2
গিটের নতুন যথেষ্ট (কোন সংস্করণ?) এ, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। @ বারজার-ফ্রুন্ড-হ্যানসেন আপনি যদি ভবিষ্যতের সন্ধানকারীদের সুবিধার জন্য সম্মত হন তবে আপনি কি গৃহীত উত্তরটি পরিবর্তন করতে চান?
জোনাহ গ্রাহাম

1
"Git নতুন যথেষ্ট (? কি সংস্করণ), এই গৃহীত উত্তর হওয়া উচিত" হিসেবে আমি জানি, এই কারণ সেই ধাক্কা স্বাক্ষর এবং তথ্যসূত্র ওয়াইল্ডকার্ড হয় সাধারণ, যে পাবলিক Git সংস্করণের জন্য কাজ করা উচিত
radistao

3
Everything up-to-dateপৃথক শাখায় একই কাজ করার সময়, কিছুই ঘটছে না বলে আমাকে গিট ২.১০.০ এ দেয় ।
ব্যবহারকারী 239558

6
কেবল ভেবেছিলাম আমার এই কল করা উচিত: এই পদ্ধতিটি কল করা রিমোটে একটি আসল শাখা তৈরি করে বলে মনে হচ্ছে HEAD। তবে সেটি মুছে ফেলা যায়। git push rorg :HEAD
মার্ক স্টিকলি

1
যে কেউ refs গঠন এবং হতাশ ট্যাগ ধাক্কা কিভাবে সাথে পরিচিত না, আপনি এই কমান্ড চাই: git push rorg refs/tags/*:refs/tags/*। কোনটি একই git push rorg --tags, তবে এই জিনিসগুলি কী করছে তা বোঝা ভাল :)
মার্ক স্টিকলে

14

প্যাথয়াইটের উত্তরের পরিপূরক হিসাবে , এখানে একটি শর্ট শেল স্ক্রিপ্ট রয়েছে যা সমস্ত শাখাটিকে এক রিমোট থেকে অন্য দূরত্বে ঠেলে দেয়:

SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
  do git push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done

সংক্ষিপ্তসার হিসাবে, উত্স রিমোটের প্রতিটি প্রত্যন্ত শাখার জন্য ("পয়েন্টার" শাখাগুলি বাদ দিয়ে HEAD এর মতো), সেই রেফটিকে গন্তব্যের দূরবর্তী স্থানে চাপুন। ( ${a//$SRC_REMOTE\/}বিটটি শাখার নাম থেকে উত্সের প্রত্যন্ত নামটি সরিয়ে দেয়, অর্থাত্ origin/masterহয়ে যায় master))


3
আমাদের git push -u $DST_REMOTE $(for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->'); do echo "$a:refs/heads/${a//$SRC_REMOTE\/}"; done)
যাঁদের জন্য


0

যে কোনও স্ক্রিপ্টের জন্য আমি আপনাকে চালানোর পরামর্শ দিচ্ছি, এটি স্ট্যাশ করা বা আপনার সমস্ত পরিবর্তন করা বুদ্ধিমানের কাজ হবে।

আমার এক থেকে অন্য প্রত্যন্তে বেশ কয়েকটি শাখা ঠেকানো দরকার। এই উত্তরগুলির প্রয়োজন ছিল যে স্থানীয় শাখাগুলি আগে থেকেই ছিল

SRC_R=origin1
DEST_R=origin2
for cbranch in $(git branch -r | grep $SRC_R | cut -d '/' -f2,3,4,5 | cut -d ' ' -f1)
do
    git checkout $cbranch
    git push $DEST_R $cbranch
done

কেবল উত্স 1 টি উত্সের রিমোটে এবং অরিজিন 2 গন্তব্য দূরবর্তীতে পরিবর্তন করুন। এটিকে "রিমোটব্রান্সক্লোনার.শ" এ অনুলিপি করুন এবং "sh কলব্রান্সক্লোনার.শ" ব্যবহার করে এটি কল করুন।

আরও ভাল উপায় হতে পারে , এটি বেশ কয়েকটি ধাক্কা দেয় না

আপনি যদি আমার কোড ব্যবহার করেন তবে আপনি সম্ভবত শংসাপত্রের ক্যাশে ব্যবহার করতে চান , অন্যথায় আপনাকে আপনার শংসাপত্রগুলি সার্টারাল সময়গুলি টাইপ করতে হবে।

উইন্ডোজ জন্য :

দ্রষ্টব্য: এই স্ক্রিপ্টটি লিনাক্সের জন্য । আপনি যদি এটি "গিট ব্যাশ" তে চালান তবে স্ক্রিপ্টটি কাজ করবে তবে বিশেষ কিছু ইনস্টল না করে আপনি এটিকে স্থানীয় কনসোল থেকে চালাতে পারবেন না।

git config [--global] credential.helper wincred

লিনাক্স জন্য

git config [--global] credential.helper cache

যেখানে [--global] এর অর্থ allyচ্ছিকভাবে --global যুক্ত করুন

আপনি যদি নতুন শাখার জন্য সমস্ত শাখার জন্য দূরবর্তী ট্র্যাকিং সেট করতে চান:

DEST_R=remotename
for cbranch in `git branch`
do
    git checkout $cbranch
    git branch -u guru/$cbranch
done

একটি .sh ফাইল হিসাবে সঞ্চিত এবং "sh ফাইল নাম.শ" দিয়ে দৌড়ে সমস্ত দূরপাল্লাগুলি দূরবর্তী 'রিমোটনাম' ট্র্যাক করতে সেট করবে


0

HEADপূর্ববর্তী উত্তরে অতিরিক্ত শাখা তৈরি হওয়ার কারণে , আমি এটির সবচেয়ে পরিষ্কার উপায়টি খুঁজে পেয়েছিলাম যে একটি খালি সংগ্রহস্থলীতে ক্লোন করা এবং তারপরে সমস্ত শাখাটিকে নীচে রিমোটে চাপানো:

git clone --bare <from-repository>
cd <from-repo-dir>
git push --set-upstream <to-repository> --all
git push --set-upstream <to-repository> --tags
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.