স্থানীয় গিট সংগ্রহস্থল রিমোটের সাথে সমলয় করে


297

আমি আমার স্থানীয় সংগ্রহস্থলকে একটি রিমোটের সাথে সিঙ্ক্রোনাইজ করতে চাই যাতে আমার স্থানীয় সংগ্রহস্থল দূরবর্তী একের 100% অনুলিপি হয়ে যায় - এর অর্থ এই যে যদি এই ফাইলগুলির মধ্যে কিছু ফাইল পৃথক হয় তবে আমরা স্থানীয় ফাইলগুলি রিমোটের সাথে ওভাররাইড করে থাকি এবং যদি সেখানে থাকে স্থানীয় রিপোজিটরিগুলিতে থাকা ফাইলগুলি যা রিমোটে নেই, স্থানীয় ফাইলগুলি সরিয়ে ফেলা হয়।

রিমোট রিপোজিটরির একটি নতুন ক্লোন না করে এটি অর্জনের কোনও উপায় আছে কি?

যেমন একই প্রশ্ন এক শট দূরবর্তী খারিজ স্থানীয় পরিবর্তনগুলি / করে দিয়ে সিঙ্ক স্থানীয় Git রেপো


4
সর্বদা আমি এখানে এলে, আমি একটি কাঁটাচামচ
সিঙ্কের

1
git fetch --prune
hassanzadeh.sd

উত্তর:


342
git fetch --prune

-p, --prune
আনার পরে, রিমোটে থাকা কোনও রিমোট-ট্র্যাকিং শাখা সরান remove ছাঁটাই অপশন


6
এটাই আমি খুঁজছিলাম! পিএস পরের বার স্ট্যাকওভারফ্লো খননের আগে আমি ম্যান পেজগুলি আরও মনোযোগ সহকারে পড়ব :-)
সের্গেই সোকোলেঙ্কো

5
হ্যাঁ, git pull -pএকই কি - 'গিট টান প্রদত্ত প্যারামিটারগুলির সাথে গিট আনতে চলে এবং পুনরুদ্ধারকৃত শাখা প্রধানকে বর্তমান শাখায় একীভূত করতে গিট মার্জ কল করে' - git-scm.com/docs/git-pull
जॉ

2
git fetch <remote> --pruneযদি কারও কাছে কেবল --pruneনির্দিষ্ট দূরবর্তী প্রয়োজন হয় তবে ব্যবহার করুন । যেমন। git fetch upstream --prune
উদ্বেগ ওয়ারদিয়ানতো

git fetch origin --pruneকোনও upstreamপ্রকল্পের কাঁটাচামচ দিয়ে আপনাকে স্থানীয় রেপো সিঙ্ক করতে
স্টুয়ার্ট কার্ডাল

2
@ সার্জিই সোকোলেঙ্কো এটাই আমরা সবাই বলি, তবে গভীরভাবে আমরা জানি যে মানুষ এত সহজেই সুবিধাজনক হয়ে উঠেছে :
মার্সেলো রোমানি

144

এই পদক্ষেপগুলি এটি করবে:

git reset --hard HEAD
git clean -f -x -d -n

তারপর ছাড়া -n

এটি সমস্ত স্থানীয় পরিবর্তনের যত্ন নেবে। এখন কমিট ...

git status

এবং লাইনটি নোট করুন:

Your branch is ahead of 'xxxx' by N commits.

এখন 'এন' নাম্বারটির একটি নোট নিন:

git reset --hard HEAD~N
git pull

এবং পরিশেষে:

git status

যুক্ত / প্রতিশ্রুতিবদ্ধ কিছুই দেখাতে হবে। সব পরিষ্কার.

তবে, একটি তাজা ক্লোন একই কাজ করতে পারে (তবে এটি অনেক ধীর)।

=== Updated ===

সময়ের সাথে সাথে আমার গিট জ্ঞানটি কিছুটা উন্নত হওয়ার সাথে সাথে আমি আরও একই পদ্ধতিতে আরও সহজ উপায় নিয়ে এসেছি। এখানে (# ব্যাখ্যা সহ) এখানে। আপনার কার্যকারী শাখায় থাকাকালীন:

git fetch # This updates 'remote' portion of local repo. 
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.

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


1
আপডেটের জন্য অনেক ধন্যবাদ গিথুব এবং বিটবাকেটের সাথে পুরোপুরি সূক্ষ্ম কাজ করে :)
কমনসেন্সকোড

এই উত্তরটি আমার জন্য সমাধানগুলির মধ্যে সবচেয়ে নির্ভরযোগ্য হয়ে উঠেছে।
অ্যালানহ

95

আপনার বুঝতে হবে যে গিট সংগ্রহস্থলটি কেবল ডিরেক্টরি এবং ফাইলগুলির গাছ নয়, সেই গাছগুলির একটি ইতিহাসও সংরক্ষণ করে - এতে শাখা এবং মার্জ থাকতে পারে।

কোনও সংগ্রহস্থল থেকে আনার সময়, আপনি সেখানকার সমস্ত বা কিছু শাখা আপনার কপিরাইটে জমা করবেন। এরপরে এটি আপনার রিপোজিটরিতে "রিমোট ট্র্যাকিং শাখাগুলি" হিসাবে থাকে, যেমন শাখাগুলির মতো remotes/origin/masterবা এর মতো নামকরণ করা হয় ।

দূরবর্তী সংগ্রহস্থল থেকে নতুন কমিটস আনতে আপনার স্থানীয় কার্যকরী অনুলিপি সম্পর্কে কোনও পরিবর্তন হবে না।

আপনার কাজের কপি স্বাভাবিকভাবে রয়েছে চেক আউট কমিট বলা HEAD। এই প্রতিশ্রুতিবদ্ধতাটি সাধারণত আপনার স্থানীয় শাখার একটি t

আমি মনে করি আপনি আপনার স্থানীয় শাখাটি (বা সম্ভবত সমস্ত স্থানীয় শাখা?) সম্পর্কিত দূরবর্তী শাখায় আপডেট করতে চান এবং তারপরে সর্বশেষ শাখাটি দেখুন।

আপনার কাজের অনুলিপি (যাতে স্থানীয় পরিবর্তন হতে পারে) সাথে কোনও দ্বন্দ্ব এড়ানোর জন্য, আপনি প্রথমে সংস্করণযুক্ত (ব্যবহার করা হয়নি git clean) সমস্ত কিছু পরিষ্কার করুন । তারপরে আপনি যে রিমোট শাখায় আপডেট করতে চান তার সাথে সম্পর্কিত স্থানীয় শাখাটি পরীক্ষা করে দেখুন এবং git resetএটি আনীত দূরবর্তী শাখায় স্যুইচ করতে ব্যবহার করুন । ( git pullআপনার স্থানীয় একের মধ্যে রিমোট শাখার সমস্ত আপডেট অন্তর্ভুক্ত করবে, যা একই কাজ করতে পারে, বা যদি আপনার স্থানীয় কমিট থাকে তবে মার্জ কমিট তৈরি করতে পারে))

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


সম্পাদনা: আপনার যদি কেবল একটি স্থানীয় শাখা থাকে এবং একটি দূরবর্তী শাখা ট্র্যাক করে থাকেন, আপনার যা করতে হবে তা হ'ল

git pull

ওয়ার্কিং ডিরেক্টরি ভিতরে থেকে।

এটি সমস্ত ট্র্যাকড দূরবর্তী শাখার বর্তমান সংস্করণ আনবে এবং এটি ট্র্যাক করছে এমন দূরবর্তী শাখার বর্তমান সংস্করণে বর্তমান শাখা (এবং কার্যকরী ডিরেক্টরি) আপডেট করবে।


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

আপনার সাধারণ ক্ষেত্রে একটি git pullযথেষ্ট হওয়া উচিত, আমি মনে করি। (আমি উত্তর আপডেট করেছি))
পাওলো ইবারম্যান

আমার যদি কিছু স্থানীয় পরিবর্তন হয় যা আমি প্রতিশ্রুত করতে চাই না what এখন যখন আমি একটি টান করি এটি আমাকে তাদের প্রতিশ্রুতিবদ্ধ বা স্ট্যাশ করতে বলে says সুতরাং এই ক্ষেত্রে আমি গিটকে কীভাবে সেগুলি ওভাররাইড করতে এবং টানতে বলতে পারি?
হর্ষানা

89

তুমি করতে চাও

git fetch --prune origin
git reset --hard origin/master
git clean -f -d

এটি আপনার স্থানীয় রেপোটিকে আপনার দূরবর্তী রেপোর মতো করে তোলে।

আপনি যে রিমোট এবং শাখার সাথে সিঙ্ক্রোনাইজ করতে চান তার সাথে উত্স এবং মাস্টার প্রতিস্থাপন মনে রাখবেন।


2
এটি এনপিএম ইনস্টল এবং বোভার ইনস্টল থেকে সমস্ত ডিরেক্টরি সরিয়ে দেয়, আপনি .gitignore- এ থাকা সমস্ত নির্ভরতা পুনরায় ইনস্টল করতে না চাইলে প্রস্তাবিত নয়
chwagssd

এটি আমার সরিয়ে দেয়নি node_modules, এটি আমি যেমন চাই ঠিক তেমন কাজ করে।
ওয়াহিদ আমিরি

সতর্কতা: এটি তালাবিহীন ফাইলগুলি সরিয়ে দেয়
অমিত যাদব

আমি এই কোডটি ব্যবহার করে আমার সমস্ত ডেটা হারিয়েছি, আমি আমার স্থানীয় সংগ্রহশালাটি গিট সংগ্রহস্থলের সাথে সুসংগত করার চেষ্টা করেছি। তবে এটি আমার স্থানীয় সংগ্রহস্থলের সাথে আমার বৈশ্বিক সংগ্রহস্থলকে সুসংগত করে তোলে made
জাহিদ খান

10

রিমোট এবং রিমোট শাখার সাথে স্থানীয় সংগ্রহস্থল সিঙ্ক করুন

কমান্ড: আপনি যে রিমোট এবং শাখার সাথে সিঙ্ক্রোনাইজ করতে চান তার সাথে উত্স এবং মাস্টার প্রতিস্থাপন মনে রাখবেন।

git fetch origin && git reset --hard origin/master && git clean -f -d

অথবা ধাপে ধাপে:

git fetch origin
git reset --hard origin/master
git clean -f -d

আপনার স্থানীয় শাখাটি এখন দূরবর্তী শাখার একটি সঠিক অনুলিপি (কমিট এবং সমস্ত)।

কমান্ড আউটপুট:

ফোরজি গিট রিপোজিটরির স্থানীয় ক্লোনটিতে কমান্ড চালানোর উদাহরণ এখানে।

sharkbook:forge lbaxter$ git fetch origin && git reset --hard origin/master && git clean -f -d
HEAD is now at 356cd85 FORGE-680
Removing forge-example-plugin/
Removing plugin-container-api/
Removing plugin-container/
Removing shell/.forge_settings
sharkbook:forge lbaxter$

4

(এই তথ্যটি গিট ব্যবহারকারীর ম্যানুয়াল থেকে এসেছে )

আমিও শিখছি, সুতরাং এটি প্রশ্নের সঠিক উত্তর নাও হতে পারে তবে এটি কারওর পক্ষে সহায়তা করতে পারে:

  1. যখন দূরবর্তী সংগ্রহস্থলটি প্রাথমিকভাবে সমস্ত শাখার ক্লোন অনুলিপিগুলি আপনার স্থানীয় সংগ্রহস্থলে সংরক্ষণ করা হয় (সেগুলির সাথে দেখুন git branch -r)
  2. ব্যবহার (দূরবর্তী শাখায় অর্থাত সিঙ্ক তাদের) এই কপি আপডেট এবং তাদের বর্তমান করতে git fetch। এটি আপনার বিদ্যমান, কাস্টম তৈরি শাখাগুলির কোনওটিকে প্রভাবিত করবে না।
  3. আপনি যে শাখায় কাজ করছেন তার একটি নতুন সংস্করণ আপনার স্থানীয় শাখার চেকআউটটি ওভাররাইড করতে (ধরে নিই যে আপনি ইতিমধ্যে কার্যকর করেছেন git add origin /path/to/repository) git checkout origin/branch_name, এটি আপনার স্থানীয়দের শাখায় পরিবর্তনগুলি ওভাররাইড করবেbranch_name

3

আপনি যেমন রিমোট রিপোজিটরির একটি আয়না চান তা মনে হচ্ছে:

git clone --mirror url://to/remote.git local.git

এই কমান্ডটি একটি খালি সংগ্রহস্থল তৈরি করে। আপনি যদি খালি সংগ্রহস্থল না চান তবে জিনিসগুলি আরও জটিল হয়ে উঠবে।


3

আপনি যদি একটি কাঁটাযুক্ত রেপো সিঙ্ক করার কথা বলছেন তবে আপনি এই পদক্ষেপগুলি অনুসরণ করতে পারেন।

গিট থেকে কাঁটাচামচ সংগ্রহস্থল কীভাবে সিঙ্ক করবেন

  1. আপনার বর্তমান গিট শাখা পরীক্ষা করুন

    git branch

  2. আপনি মাস্টার না থাকলে মাস্টার চেকআউট করুন

    git checkout master

  3. আপনার কাছে যদি সঠিক অ্যাক্সেসের অধিকার থাকে তবে প্রবাহের সংগ্রহস্থলটি আনুন

    git fetch upstream

  4. আপনি যদি ত্রুটির নীচে পেয়ে থাকেন তবে চালান

    git remote add upstream git@github.com:upstream_clone_repo_url/xyz.git

    fatal: 'upstream/master' does not appear to be a git repository  
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights and the repository exists.
    
  5. এখন নীচের কমান্ডটি চালান।

    git fetch upstream

  6. এখন আপনি যদি মাস্টার হন তবে আপস্ট্রিম / মাস্টারকে মাস্টার শাখায় মার্জ করুন

    git merge upstream/master

    এটাই!!

    git remoteকমান্ডের মাধ্যমে ক্রসচেক , আরও সুনির্দিষ্টgit remote -v

    যদি আমারও প্রবাহের রেপোতে অধিকার থাকে তবে আমি একটি স্থানীয় স্থানীয় প্রবাহ শাখা তৈরি করতে পারি এবং সেই কাজটি করতে পারি যা সেখানে প্রবাহিত হবে।


তৃতীয় ধাপে আমি ইতিমধ্যে কোনও ত্রুটি পেয়েছি তবে কেন আমাকে 5.git উপরিভাগে আনতে হবে?
মোঃ সিফাতুল ইসলাম

-2

আপনি তার জন্য গিট হুক ব্যবহার করতে পারেন । কেবলমাত্র একটি হুক তৈরি করুন যা কোনও আপডেটের পরে অন্য রেপোতে ধাক্কা দেয়।

অবশ্যই আপনি মার্জ সংঘাত পেতে পারেন তাই আপনাকে কীভাবে মোকাবেলা করতে হবে তা নির্ধারণ করতে হবে।

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