দূরবর্তী সংগ্রহস্থল থেকে গিট টান নির্দিষ্ট সংশোধন করুন


56

আমাদের কাছে একটি রিমোট গিট রেপো রয়েছে যা আমরা সাধারণত git pushআমাদের ডেভ সার্ভার ব্যবহার করার পরে git pullআমাদের লাইভ সার্ভারগুলিতে রেপোর সর্বশেষতম ধাক্কা সংস্করণটি পেতে ব্যবহার করি dep

তবে যদি আমরা কয়েকটি সংশোধন প্রতিশ্রুতিবদ্ধ এবং ধাক্কা দিয়েছি ( git pullলাইভ সার্ভারগুলি ব্যতীত) আমরা কীভাবে এটি করতে পারি git pullযা আমরা চাই পুরানো প্রতিশ্রুতির কথা উল্লেখ করছি?

যেমন কিছু git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4

উত্তর:


64

একবার আপনি সংগ্রহস্থলটি টানলে আপনি যেতে সক্ষম হবেন:

git checkout 3ef0d...

1
ভাল, এটি পুরোপুরি কাজ করেছে। এছাড়াও লক্ষ্য করা গেছে যে আমি যদি ভবিষ্যতের টানগুলির জন্য পুনরায় সিঙ্কে ফিরে আসতে চাই তবে পরের git pull server:repogit pull
টানটি

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

8

uploadpack.allowReachableSHA1InWant

যেহেতু গিট ২.০.০ এই কনফিগারেশন ভেরিয়েবলটি সার্ভারে সক্ষম করা যায়, এখানে গিটহাব বৈশিষ্ট্য অনুরোধ এবং গিটহাব এই বৈশিষ্ট্যটি সক্ষম করার প্রতিশ্রুতিবদ্ধ

বিটবকেট সার্ভার এটি 5.5+ সংস্করণ থেকে সক্ষম করেছে

ব্যবহার:

# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
    touch "$i"
    git add "$i"
    git commit -m "$i"
done

# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"

# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"

# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true

# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"

2

যদি আপনার লাইভ সার্ভারে কিছু প্রক্রিয়া তাত্ক্ষণিকভাবে টানা কন্টেন্টটি অ্যাক্সেস করে (যেমন আপনি টানা git checkout 3ef0dপরে কাজ করতে পারবেন না ), আপনার প্রযোজনায় যে সংস্করণটি স্থাপন করতে চান তা ট্যাগ করার কথা বিবেচনা করা উচিত এবং বিশেষ করে সেই ট্যাগটি উত্পাদনের উপর চেকআউট করা উচিত, যাতে টানলে তাৎক্ষণিকভাবে না ঘটে আপনার কাজের ডিরেক্টরি পরিবর্তন করুন। অন্যথায় আপনি আপনার টানার ঠিক আগে কাউকে চাপ দিচ্ছেন risk


1

নোট করুন যে git pull git checkout my-old-commit এখন আপনাকে একটি বিচ্ছিন্ন হেড অবস্থায় ফেলেছে - কার্যকরভাবে আপনি এই ভাণ্ডারটিতে ভবিষ্যতের কমিটগুলি একটি নতুন প্রতিশ্রুতিবদ্ধ পথটি প্রেরণ করছেন। ডিপ্লোয়মেন্ট রেপোগুলির জন্য এটি কোনও বড় সমস্যা নয়, কারণ কেবলমাত্র প্রতিশ্রুতিগুলি টানা যাওয়ার আগেই সঠিকভাবে প্রতিশ্রুতিবদ্ধ হওয়া উচিত।

যাইহোক, কমিট মার্কার্স (মাথা, ট্যাগগুলি, রিমোটগুলি) মাস্টার রেপোর সাথে অভিন্ন দেখায় তা পরীক্ষা করা কখনও কখনও দরকারী। আপনার চেকআউটটি অনুসরণ করে এটি ঠিক করার জন্য: git reset - মাথাটি আবার সংযুক্ত করে git fetch - রিমোটগুলির জন্য চিহ্নিতকারীগুলিকে সিঙ্ক করে [এটি গিট সংস্করণ নির্ভর হতে পারে - অবশ্যই আমাদের পরিবেশটি এখনও ১.7 এ রয়েছে ... সুতরাং আর ওয়াইএমএমভি দরকার হতে পারে]

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