tutorial - gitlab




কিভাবে git সঙ্গে একটি নতুন ফাইল শুধুমাত্র অংশ মঞ্চ? (4)

এটি করার সবচেয়ে সহজ উপায় (এবং সাধারণভাবে আইহো ইন্টারেক্টিভ স্টেজিং) git gui । এটা গিট সঙ্গে bundled আসে এবং গিট দ্বারা সমর্থিত প্রায় সব প্ল্যাটফর্মের উপর কাজ করা উচিত।

শুধু git gui চালান এবং একটি gui যে স্টেজিং এবং unstaging কৃপণ ব্যক্তি এবং এমনকি ট্র্যাক এবং untracked ফাইল একক লাইন পারবেন।

আমি গিট যোগ ভালবাসা - interteractive । এটি এখন আমার দৈনন্দিন কর্মপ্রবাহ অংশ।

সমস্যাটি অট্যাক্টেড ফাইলগুলির সাথে কাজ করে না বলে মনে হয়। আমি যা করতে চাই তা হল একটি নতুন ফাইল ট্র্যাক করা, তবে শুধুমাত্র এটির একটি অংশ যোগ করুন, অর্থাৎ এই নতুন ফাইলের কিছু অংশ এখনও স্টেজ করার জন্য প্রস্তুত নয়।

উদাহরণস্বরূপ, জিট অ্যাড-আই সহ, আমি প্যাচ বিকল্পটি চয়ন করতে এবং এমনকি নতুন কোডের অংশগুলি মঞ্চে ব্যক্তিগত কৃপণ সম্পাদনা করতে পারি, ডিবাগ কোড মন্তব্যগুলি অযাচিত করে ফেলে। আমি এই ভাবে কাজ করতে ভালোবাসি কারণ এটি স্পষ্ট করে তোলে যে মেগা প্যাচের জায়গাগুলি আমি বর্তমানে কাজ করছি, এখনও কাজ দরকার।

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

সুতরাং প্রশ্ন হল: কিভাবে একটি নতুন ফাইলের শুধুমাত্র অংশটি মঞ্চে রাখতে হবে, যাতে এই নতুন ফাইলটি ট্র্যাক করা যায় তবে পুরো সামগ্রী বা তার সামগ্রীগুলির অংশগুলি অস্থিতিশীল করে ফেলে?


শুধু অন্য সম্ভাবনা রেকর্ডের জন্য: আমি ব্যবহার

git add -N file
git add -p file

এবং তারপর আপনি কৃপণ মঞ্চ, বা জায়গায় তাদের সম্পাদনা করতে পারেন।


সম্পাদনা: এই এখন কাজ করা বলে মনে হচ্ছে না। আমি এটা আগে ছিল নিশ্চিত (গিট 1.7.1)। যদি এটি কাজ না করে তবে আমি সুপারিশ হিসাবে স্টেজিং /dev/null সুপারিশ সুপারিশ:

git update-index --add --cacheinfo 100644 $(git hash-object -w /dev/null) newfile

আপনি যদি উইন্ডোজ (কোনও /dev/null ছাড়া) -এ থাকেন তবে আপনি এটি খালি ফাইলের পাথ দিয়ে প্রতিস্থাপন করতে পারেন।

মূল উত্তর

তুমি চাও

git add -p # (or --patch)

এই আমার জন্য untracked ফাইল যোগ করে। মানুষের পাতা থেকে:

ইন্টারেক্টিভ সূচক এবং কাজ গাছের মধ্যে প্যাচ এর কৃপণ নির্বাচন করুন এবং সূচক তাদের যোগ করুন। এটি সূচকের পরিবর্তিত সামগ্রী যোগ করার আগে ব্যবহারকারীটিকে পার্থক্য পর্যালোচনা করার সুযোগ দেয়।

এটি কার্যকরভাবে যোগ করে - ইন্টারেক্টিভ, কিন্তু প্রাথমিক কমান্ড মেনুকে বাইপাস করে এবং সরাসরি প্যাচ উপcomm্যান্ডে চলে যায়। বিস্তারিত জানার জন্য "ইন্টারেক্টিভ মোড" দেখুন।


git update-index --add --cacheinfo 100644 $(git hash-object -w /dev/null) newfile
git add --interactive newfile

সহজ ডেমো:

mkdir /tmp/demo
cd /tmp/demo
git init .

echo hello > newfile
git update-index --add --cacheinfo 100644 $(git hash-object -w /dev/null) newfile
  • ইঙ্গিত যদি আপনি নিশ্চিত হন যে 'খালি' e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 আপনার গিট অবজেক্ট ডাটাবেসে ইতিমধ্যে বিদ্যমান, তবে আপনি পরিবর্তে হ্যাশ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 হার্ডকোড করতে পারেন। আমি যে করছেন সুপারিশ করবেন না
  • ইঙ্গিত যদি আপনি উইন্ডোজ এ থাকেন তবে সম্ভবত আপনি কেবল NUL: ব্যবহার করতে পারেন NUL: পরিবর্তে /dev/null অন্যথায়, echo -n '' | git hash-object --stdin -w মতো কিছু ব্যবহার করুন echo -n '' | git hash-object --stdin -w

এখন newfile খালি ব্লব হিসাবে নতুন newfile ধারণ করবে, এবং খালি ব্লব বস্তু ডাটাবেসের মধ্যে প্রবেশ করানো হয়েছে যদি এটি এখনও বিদ্যমান না থাকে:

$ find .git/objects/ -type f 
.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   newfile
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   newfile
#

$ git diff
diff --git a/newfile b/newfile
index e69de29..ce01362 100644
--- a/newfile
+++ b/newfile
@@ -0,0 +1 @@
+hello

এই আপনি চান কি সঠিকভাবে হওয়া উচিত। আমি খুব বুদ্ধিমান সূচক পরিচালনার জন্য ভিম ক্ষুধার্ত প্লাগইন সুপারিশ করতে পারেন ( Better গিট অ্যাড-পি দেখুন? )





git