অন্য কম্পিউটারে স্ট্যাশ রফতানি করুন


296

অন্য কম্পিউটারে স্ট্যাশড পরিবর্তন রফতানির জন্য আমার একটি উপায় দরকার।

কম্পিউটার 1 এ আমি করেছি

$ git stash save feature

আমি স্ট্যাশ প্যাচটি কোনও ফাইলে পাওয়ার চেষ্টা করছি এবং তারপরে এটি অন্য কম্পিউটারে আমদানি করব

$ git stash show -p > patch

এই কমান্ডটি আমাকে একটি ফাইল দেয় যা আমি অন্য কম্পিউটারে চলে যেতে পারি যেখানে এই রেপো ক্লোন করা আছে, তবে কীভাবে এটি আবার স্ট্যাশ হিসাবে আমদানি করা যায় প্রশ্ন।

ধন্যবাদ


6
FYI git stash saveএখন পক্ষে অবচিতgit stash push
ইওয়ান

উত্তর:


290

খালি চালিয়ে আপনি প্যাচ ফাইল প্রয়োগ করতে পারেন (পরিবর্তনগুলি প্রতিশ্রুতি না দিয়ে)

git apply patchfile

তারপরে আপনি কেবল বর্তমান ওয়ার্কিং ডিরেক্টরি থেকে একটি নতুন স্ট্যাশ তৈরি করতে পারেন:

git stash

2
@ মার্সেলো এ: শুনতে ভাল লাগল, তবে দয়া করে উত্তরের ভোটের সংখ্যার নীচে বড় চেকমার্কটি ক্লিক করে আপনি যেমন গৃহীত উত্তরগুলি চিহ্নিত করুন। আপনার প্রশ্নের সমাধান হিসাবে চিহ্নিত করা হবে।
poke করুন

2
মনে রাখবেন যে প্রশ্নটি জিজ্ঞাসা করার সময় থেকে সিস্টেম কিছুক্ষণ (15 মিনিট, আমার মনে হয়) অবধি "স্বীকৃত" হিসাবে একটি উত্তর চিহ্নিত করতে দেয় না।
গ্রেগ হিউগিল 21

23
এই উত্তরটি পড়ার পরে আমি ভাবছিলাম যে আমার সমস্ত স্ট্যাশ থেকে কোনও নির্দিষ্ট স্ট্যাশ কীভাবে নির্বাচন করা যায়। এর উত্তর এখানে: stackoverflow.com/a/1910142/1148702 । এই ক্ষেত্রে আমি শেষ করেছিলাম: git stash show "stash@{0}" -p > patchওপি'র দ্বিতীয় শেল কমান্ডের পরিবর্তে।
টিম কেম্বার

1
@ টিম ক্যামবার আমার মনে হয় না আপনার চারপাশে দ্বিগুণ উক্তি দরকার stash@{0}..
আরি সোনায়

2
@ আরিগোল্ড আপনি যে শেলটি ব্যবহার করছেন তা নির্ভর করে। পাওয়ারশেলের উদাহরণস্বরূপ, আপনার সেগুলি প্রয়োজন কারণ কোঁকড়ানো ধনুর্বন্ধনী সেখানে একটি বিশেষ বাক্য গঠন।
অকর্মা

18

বিকল্পভাবে আপনি ব্যবহার করে আপনার স্ট্যাশ থেকে একটি কম্পিউটার তৈরি করতে পারেন (কম্পিউটারে 1)

git stash branch stashed_changes_branch

আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ:

git commit -a

তারপরে এটি কম্পিউটারে রিমোট হিসাবে যুক্ত করুন 2:

git remote add pc1 user@computer1:/path/to/repo

এখন আপনি ব্যবহার করে দূরবর্তী তথ্য পুনরুদ্ধার করতে পারেন

git fetch pc1

এখন আপনি যেভাবে চান প্রতিশ্রুতিটি আমদানি করতে পারেন; ব্যবহার Git চেরি-বাছাই , Git রি-বেসের ফলে বা যাই হোক না কেন আপনার মত ... তুমি এটা পছন্দ আপনি ঠিক কি দেখতে চাই তাহলে Git লুকোবার জায়গা প্রয়োগ ; আপনি গিট চেরি-পিক - না-কমিট ব্যবহার করতে পারেন


কম্পিউটার 1 এবং কম্পিউটার 2 এর মধ্যে আপনার যদি সরাসরি সংযোগ না থাকে; আপনি রিমোট ব্যবহার করতে পারেন (যেমন গিথুব বা অনুরূপ কিছু):

git push origin stashed_changes_branch

এবং কম্পিউটার 2 এ:

git fetch

1
এটি ধরে নিয়েছে যে উত্স সিস্টেম (কম্পিউটার 1) বাহ্যিক সংযোগগুলি গ্রহণের জন্য উন্মুক্ত যা বেশিরভাগ লোকের এখানে অবতরণ করার ক্ষেত্রে এটি সত্য হওয়ার সম্ভাবনা নেই। আপনি যদি শাখার রুটে যেতে চান তবে কেন কেবল একটি টেম্প শাখাটিকে দূরবর্তী উত্সে ঠেকান এবং কম্পিউটার 2 থেকে টানবেন না? আপনি যদি এটি কাছে রাখতে চান না তবে আপনি টানা মাত্রই আপনি রিমোট শাখাটি মুছতে পারেন। গিটের শাখাগুলি এত সস্তা যে এগুলি ব্যবহার না করার সাধারণত কয়েকটি কারণ রয়েছে।
অবিভাজ্য

@ অপরিবর্তনীয় আমি দ্বিমত পোষণ করছি আজ ইন্টারনেটে দুটি কম্পিউটার সংযোগ করার প্রচুর সুযোগ রয়েছে। উত্তরে বর্ণিত কৌশলটি কোনও ল্যাপটপ থেকে ল্যানের ডেস্কটপগুলিতে একটি কাজ অগ্রগতিতে কোনও স্থানান্তরিত করতে কার্যকর হতে পারে। এমনকি হামাচির মতো ভার্চুয়াল ভিপিএন সার্ভিস ইন্টারনেটের মাধ্যমে যে কোনও জায়গায় সরাসরি গিট চলমান কম্পিউটারগুলির মধ্যে ফাইল স্থানান্তর করতে ব্যবহৃত হতে পারে।
স্টিম্পওয়ার্ড হয়েছে

1
@ স্ট্যাম্পওয়ার্ড, নিশ্চিত যে এটি কিছু লোক / পরিস্থিতির ক্ষেত্রে সত্য হতে পারে তবে আমি ভবিষ্যতের পাঠকদের জন্য এটি লক্ষ্য করার মতো বিষয় বলে মনে করেছি কারণ এই সমাধানটির কাজ করা আপনার আসন্ন ট্র্যাফিককে গ্রহণ করার জন্য আপনার স্থানীয় এনভি / সিস্টেমটি পরিবর্তন করার পক্ষে একটি অনুরুপ কনফিগারেশন লাগে না এটি আমার মতে, এই জাতীয় কোনও কাজের জন্য "ওভারকিল"। যদি আপনার সিস্টেম (গুলি) ইতিমধ্যে খোলা থাকে তবে যেকোন উপায়ে এই উত্তরটি ব্যবহার করুন - এটি ভুল নয়। আমি কেবল অনুভব করি যে এখানে অবতরণকারী বেশিরভাগ ব্যবহারকারীর অবস্থা এমন হবে না।
অবিভাজ্য

স্ট্যাশগুলি কমিটমেন্ট অবজেক্টস এবং সুতরাং ইতিমধ্যে কমিট হ্যাশ রয়েছে (দেখুন git stash list --oneline), সুতরাং আপনাকে প্রযুক্তিগতভাবে কোনও নতুন কমিট অবজেক্টে স্ট্যাশ প্রয়োগ করতে হবে না। অন্য কথায়, একটি নতুন শাখা তৈরি করা প্রয়োজনীয় নয়। তবে সরাসরি কোনও রিমোটে স্ট্যাশ ঠেলাঠেলি কমপক্ষে বলা মুশকিল।
টাইলার ক্রম্পটন

15

বিকল্পভাবে আপনি নিম্নলিখিত স্থানীয় স্ট্যাশগুলি অন্য একটি কম্পিউটারে রপ্তানি করতে পারেন

  • git pull আপনার পুরানো এবং নতুন গিট ডিরেক্টরি উভয়ই উভয় সর্বশেষ পরিবর্তন রয়েছে তা নিশ্চিত করতে।
  • পুরানো গিট ডিরেক্টরি থেকে .git ফোল্ডারটি নতুন ভাণ্ডারে অনুলিপি করুন

1
যদিও .git এর সংকুচিত টারটি 700M + ছিল, এটি অন্যান্য প্রস্তাবিত সমাধানগুলির চেয়ে অনেক সহজ হয়ে উঠল, বিশেষত যেহেতু আমার একাধিক স্ট্যাশ ছিল।
ক্রিস ওয়ার্থ

5

সোর্সট্রিতে স্ট্যাশ রফতানি কীভাবে করবেন:

  1. আপনি যে স্ট্যাশ ব্যবহার করতে চলেছেন সেই শাখা থেকে একটি নতুন শাখা "স্ট্যাশ ট্রান্সফার" করুন
  2. এটিতে আপনার স্ট্যাশ প্রয়োগ করুন এবং একটি প্রতিশ্রুতিবদ্ধ করুন

  3. আপনার প্রতিশ্রুতিতে ক্লিক করুন এবং এটি থেকে একটি প্যাচ তৈরি করুন, প্যাচ ফাইলটি আপনার সাথে রাখুন।

  4. একটি ভিন্ন সংগ্রহস্থলে যান, একই প্যারেন্ট শাখাটি নির্বাচন করুন যা আপনি সবে 1 ব্যবহার করেছিলেন)

  5. ক্রিয়াগুলি / প্যাচ প্রয়োগ করুন, মোড নির্বাচন করুন: কার্যকরী অনুলিপি ফাইলগুলি সংশোধন করুন, প্যাচ প্রয়োগ করুন এখন চাপ দিন আপনার বর্তমান কাজের পরিবেশে প্যাচ থেকে আপত্তিহীন পরিবর্তন রয়েছে

  6. বর্তমান রেপোগুলির জন্য একটি নতুন স্ট্যাশ তৈরি করুন


4

আপনি কোনও মেশিন থেকে প্যাচ ফাইল হিসাবে স্ট্যাশ তৈরি করতে পারেন, তারপরে সেই প্যাচ ফাইলটি অন্য মেশিনে ভাগ করতে পারেন।

প্যাচ হিসাবে স্ট্যাশ তৈরি করা

$ git stash show "stash@{0}" -p > changes.patch

"স্ট্যাশ @ {0}" স্ট্যাশগুলির রেফারেন্স I এটি সর্বশেষ স্ট্যাশ সহ প্যাচ ফাইল তৈরি করবে। $ git stash listআপনার স্ট্যাশগুলির তালিকা দেখতে এবং আপনি কোনটি প্যাচ করতে চান তা নির্বাচন করতে আপনি যদি পৃথক একটি ব্যবহার আদেশটি চান।

প্যাচ প্রয়োগ করা

এখন সেই স্ট্যাশ অন্য মেশিনে স্থানান্তর করুন এবং এটি আপনার প্রকল্পের মূল ফোল্ডারে আটকান। তারপরে এই কমান্ডটি চালান

$ git apply changes.patch

যদি ভুল হয় এবং আপনি পরিবর্তনটি বিপরীত করতে চান

$ git apply changes.patch --reverse

3

আরেকটি বিকল্প হয় অন্য কম্পিউটারে এক কম্পিউটার থেকে ফোল্ডার। rsync.gitrsyncকেবলমাত্র ফাইল পরিবর্তনগুলি (একটি অনুলিপি থেকে দ্রুত) প্রসেস করে।

এই পদ্ধতির একটি নেতিবাচক দিক হ'ল কনফিগারগুলিও ওভাররাইট করা হবে, যা আপনি দুটি মেশিনের মধ্যে বিভিন্ন .git কনফিগারেশন চালনা করলে পছন্দসই হবে না। তবে আপনি --excludeবিকল্পগুলি সহ ফাইলগুলি বাদ দিয়ে এটি কাটিয়ে উঠতে পারেন rsync

সামগ্রিকভাবে আমি মনে করি একটি নেটিভ গিট সলিউশন ক্লিনার, তবে এই rsyncহ্যাকটি হুট করে এমন কারওর জন্য ভাল হতে পারে যিনি গিটের চেয়ে আরএসসিএনসি-র সাথে বেশি পরিচিত হতে পারেন।


3

মূল পোস্ট থেকে শুরু করার কমান্ড:

git stash show -p stash@{x} > patch_file

আমার পক্ষে কাজ করেনি (কোনও কারণে এটি অযথা প্যাচ ফাইল তৈরি করেছে)। পরিবর্তে আমাকে করতে হয়েছিল:

git stash apply stash@{x}
git commit

প্রতিটি স্ট্যাশ জন্য আমি স্থানান্তর করতে চেয়েছিলেন। তারপরে, আমি ফাইলের মধ্যে 'প্যারেন্ট' রেপো রেখেছি: /// 'চাইল্ড' রেপো পৌঁছানোর জন্য এবং প্রতিটি স্ট্যাশ কমিটের জন্য নিম্নলিখিতটি করেছেন:

git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child

এটি আরও জটিল তবে আমার জন্য কৌশলটি করেছেন।


0

আপনি যদি নিজের পরিবর্তনগুলি একটি মেশিন থেকে অন্য মেশিনে স্থানান্তর করতে চান তবে আপনি সর্বদা আপনার মেশিনে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করতে পারেন এবং তারপরে তাদের মেশিনে একটি নরম রিসেট করতে পারেন।

দপ্তর

git commit -m "-stash-"

রান্নাঘর

git reset --soft HEAD~1

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