গিট দিয়ে কোনও নতুন ফাইলের অংশটি কীভাবে মঞ্চ করবেন?


221

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

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

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

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

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

উত্তর:


414

ওহো, এগুলি update-indexএবং hash-objectব্যবসায়গুলি অত্যন্ত জটিল বলে মনে হচ্ছে। পরিবর্তে এটি সম্পর্কে কীভাবে:

git add -N new_file
git add -i

থেকে git help add:

-N, --intent-to-add
    Record only the fact that the path will be added later.  An entry
    for the path is placed in the index with no content.  This is useful
    for, among other things, showing the unstaged content of such files
    with git diff and committing them with git commit -a.

9
++, 1! dueণ আমি এই মুহুর্তে এই </shame>
ম্যানপেজগুলি

1
ভাল পাওয়া গেছে। আমার আরও কিছুটা আগে ম্যান পেজটি স্ক্রোল করা উচিত ছিল। সম্ভবত আমার গিট প্রো ব্যাজটি ফিরিয়ে দেওয়া উচিত।
dave1010

3
বিস্মিত হ'ল গিট-গুই কোনও নতুন ফাইল থেকে লাইন মঞ্চে রাখতে অভ্যন্তরীণভাবে এটি ব্যবহার করে না।
দেইউইন

6
অপূর্ব -Nআবিষ্কার, ধন্যবাদ! যদিও আমি -pএটি ক্ষেত্রে এটি একত্রিত করতে পছন্দ করব । gid add -N the_fileএবং git add -p। যেটি -N-A
এটির

@ দেইউইন - আপনি "গিট অ্যাড-এন $ ফাইলে নাম" করতে আপনার .গিটকনফিগটিতে একটি [গিটুল] যুক্ত করতে পারেন: [গিটুল "অভিপ্রায় যুক্ত করুন"] সেমিডি = "গিট অ্যাড-এন NAME ফাইলে নাম" প্রয়োজনীয়তা = হ্যাঁ নোকনসোল = হ্যাঁ
স্টিভ ফলি

7

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

সহজভাবে চালান git guiএবং একটি গুই খুলবে যা মুরগি এবং আনস্টেজিং হানস এবং এমনকি ট্র্যাকড এবং অন্রে্যাকড ফাইলগুলির একক লাইনকে অনুমতি দেয়।

গিট গুই স্ক্রিনশট


এটি একটি সৃজনশীল উত্তর এবং কখনও কখনও এটি খুব, খুব দরকারী।
পাবলো ওলমোস ডি আগুয়েলেরা সি।

3
সমস্ত গিট বিতরণ অন্তর্ভুক্ত নয় যে কেবল একটি নোট git gui। উদাহরণস্বরূপ, ডেবিয়ানে এটি 'গিট-গুই' নামে একটি পৃথক প্যাকেজে রয়েছে।
ক্রিস্টোপার

বছরের পর বছর ধরে এই বৈশিষ্ট্যটির জন্য অনুসন্ধান করা (যথেষ্ট কঠিন নয়), এটি জীবন পরিবর্তক
অস্টিনমার্টন

2
আমার জন্য অচিহ্নযুক্ত ফাইলগুলির একক লাইনের মঞ্চায়ন git guiকখনও কাজ করেনি। আসলে, এটি এই মেনু বিকল্পগুলি অক্ষম করে
দেইউইন

2
@ দেইউইন আমার অবশ্যই প্রশ্নটিতে এটি মিস করেছেন - আমার স্ক্রিনশটটি ইতিমধ্যে একটি ট্র্যাক করা ফাইল দেখায়। আপনি যদি git guiকোনও নতুন ফাইলের জন্য ব্যবহার করতে চান তবে আপনাকে git add -N new_fileপ্রথমে চালাতে হবে - রিচার্ড হ্যানসেনের উত্তর দেখুন।
ক্রোনিয়াল

6
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পরিবর্তে হ্যাশটিকে হার্ডকোড করতে পারেন । আমি এটা করার প্রস্তাব দিই না_
  • ইঙ্গিত আপনি যদি উইন্ডোতে থাকেন তবে আপনি সম্ভবত এটিরNUL: পরিবর্তে ব্যবহার করতে পারেন /dev/null। অন্যথায়, কিছু ব্যবহার করুনecho -n '' | git hash-object --stdin -w

এখন সূচকটি 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

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


1
এটি ভাল কাজ করে বলে মনে হচ্ছে। এটি মনে রাখা কিছুটা জটিল হওয়ায় আমি এটিকে "পর্যায়-খালি ফাইল" এনে দিয়েছি।
dave1010

@ ডেভ 1010: খুশি যে এটি সাহায্য করেছে! হ্যাঁ আমি একটি উপনাম যুক্ত করার কথা ভেবেছিলাম, তবে আপনি কীভাবে যেমন ওয়াইল্ডকার্ডস বা একাধিক ফাইল নাম যুক্তিগুলি সাধারণভাবে পরিচালনা করতে চান তা আমি জানতাম না। তাই আমি না করতে বেছে নিয়েছেন
sehe

2

সম্পাদনা: এটি এখন কাজ করছে বলে মনে হচ্ছে না। আমি নিশ্চিত এটি আগে ছিল (গিট 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)

এটি আমার জন্য তালিকাভুক্ত ফাইল যুক্ত করে। ম্যান পৃষ্ঠা থেকে:

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

এটি কার্যকরভাবে অ্যাড - ইন্টেরেটিভ চালায় তবে প্রাথমিক কমান্ড মেনুটিকে বাইপাস করে সরাসরি প্যাচ সাবকম্যান্ডে ঝাঁপিয়ে পড়ে। বিশদগুলির জন্য "ইন্টারেক্টিভ মোড" দেখুন।


2
তবে আকর্ষণীয়, এটি আমার পক্ষে কাজ করে না (গিট 1.7.4); git add -p newfileমোটেই কাজ করে না (nu প্রভাব) এবং git add --interactive'[a] ডিডি আনট্র্যাকড' এর প্রভাব রয়েছে যা git add newfile; 1.7.5.3 গিট দিয়েও সম্পাদনা করুন ; কোনও ডাইস নেই
se

উইন্ডোজের জন্য ভাল ইঙ্গিত, আমার উত্তরে এর জন্য ইঙ্গিত যুক্ত করা হয়েছে। ধন্যবা
sehe

-3

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

git add -N file
git add -p file

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


1
এই উত্তরটি গৃহীত উত্তর হিসাবে একই বলে, এটি ২০১১-এর শেষ। ডাউনভোট।
স্টানিস্লাভ পাঙ্কেভিচ 13

গৃহীত উত্তরটির সাথে একত্রিত add -Nহয় add -i। আমি কেবল কাজের add -pপরিবর্তে add -iএটিও যুক্ত করেছি।
পেড্রো অ্যাডাম ভার্গারা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.