গিট ডিফ করা - স্ট্যাট সম্পূর্ণ ফাইলের পাথ দেখায়


104

করছেন উপর git diff --statকিছু ফাইল সংগ্রহস্থলের বেস থেকে পূর্ণ পাথ দিয়ে তালিকাভুক্ত করা হয় কিন্তু কিছু ফাইল হিসেবে তালিকাভুক্ত করা হয়:

.../short/path/to/filename.  

সেই পথটি দিয়েই শুরু হয় ...এবং কেবল ছোট পথ দেখানো হয়।

git diffকোনও স্ক্রিপ্টের মাধ্যমে সহজেই প্রক্রিয়া করার জন্য সমস্ত ফাইলের জন্য আমি পুরো ফাইলের পথের তালিকা করতে চাই । git diffসর্বদা পুরো পথ দেখানোর জন্য কোনও উপায় আছে কি?

উত্তর:


108

git diffকমান্ড জন্য ঐচ্ছিক মান লাগে --stat:

--stat[=<width>[,<name-width>[,<count>]]]
       Generate a diffstat. You can override the default output width for
       80-column terminal by --stat=<width>. The width of the filename
       part can be controlled by giving another width to it separated by a
       comma. By giving a third parameter <count>, you can limit the
       output to the first <count> lines, followed by ...  if there are
       more.

       These parameters can also be set individually with
       --stat-width=<width>, --stat-name-width=<name-width> and
       --stat-count=<count>.

(স্ক্রিপ্টিংয়ের জন্য আপনি git diff-treeসরাসরি ব্যবহার করতে পারেন যেহেতু এটি "নদীর গভীরতানির্ণয়" কমান্ডের বেশি, যদিও আমার সন্দেহ হয় যে আপনি যে কোনও উপায়েই ভাল থাকবেন। নোট করুন যে --statব্যবহারের সাথে আপনার একই অতিরিক্ত পাঠ্য প্রয়োজন git diff-treegit diff"চীনামাটির বাসন ব্যবহারের মধ্যে প্রয়োজনীয় পার্থক্য " "সামনের প্রান্ত এবং git diff-treeনদীর গভীরতানির্ণয় কমান্ডটি হ'ল নাম পরিবর্তন সনাক্তকরণ করবেন কিনা তা git diffঠিক diff.renamesকরার জন্য বিকল্পগুলির জন্য আপনার কনফিগার করা সেটিংস দেখায় Well ঠিক আছে, আরও, সামনের git diffপ্রান্তটি git diff-indexযদি আপনি সূচির সাথে কোন কমিটের তুলনা করছেন তবে উদাহরণস্বরূপ, অন্য কথায়, git diff আপনার কনফিগারেশন পড়ে এবং ডান নদীর গভীরতানির্ণয় স্বয়ংক্রিয়ভাবে প্রার্থনা করে ।)



1
নোট করুন যে শেষ অংশের প্রস্থ (+++ / ---) সীমাবদ্ধ করতে আপনি একটি পৃথক --stat-graph-width=...সুইচ ব্যবহার করতে পারেন । এও লক্ষ্য করুন যে উচ্চতর সেটিংটি যথেষ্ট --stat-graph-width=এবং --stat-name-width=যথেষ্ট নয়, আপনি --stat-width=দুটিটি কভার করার জন্য আপনাকে অবশ্যই যথেষ্ট বড় সেট করতে হবে ।
jakub.g

@ জাকুব: ভাল পয়েন্ট। গিট উত্সটিতে কিছুটা খননের উপর ভিত্তি করে, এটি 1.7.10 গিট দিয়ে গেছে।
টেরিক

4
এটি বিশ্বায়নের কোন উপায় আছে কি? প্রতিবার এটি টাইপ করা পাগল।
রুডি

@ রুডি: হায়, না: একটি কনফিগারেশন ভেরিয়েবল diff.statGraphWidthআপনি --stat-graph-widthমান নির্ধারণ করতে ব্যবহার করতে পারেন তবে অন্যরা আপনার টার্মিনালের প্রস্থে ডিফল্ট হয়ে যায়। (সুতরাং, বিকল্প উত্তর: "হ্যাঁ, কেবলমাত্র আপনার টার্মিনাল উইন্ডোটি 1000 কলামগুলি প্রশস্ত করুন" :-))
টেরিক

22

স্ক্রিপ্ট প্রক্রিয়াজাতকরণের জন্য, নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করা ভাল:

# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file


# list the names and change statuses:
git diff --name-status
M       path/to/modified/file
R100    path/to/existing/file   path/to/renamed/file


# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1       0       path/to/modified/file
0       0       path/to/{existing => renamed}/file

ক্ষেত্রের টার্মিনেটর হিসাবে -zব্যবহার NULকরা বিকল্পের সাথে মিলিত হয়ে এগুলি প্রতিটি দৃ .় স্ক্রিপ্ট প্রসেসিংয়ের জন্য আরও কার্যকর হয়ে ওঠে ।


আমার পরীক্ষাগুলি অনুসারে আপনি এই আদেশগুলি ব্যবহার করে সংস্থানটির পুরো পথটি পাবেন না। আপাতত আমি কেবল মুছে ফেলা ফাইলগুলির জন্য আপেক্ষিক পাথগুলি দেখতে পাচ্ছি। আমি জানি না যে এই ফাইলগুলির ক্ষেত্রে এটিই ছিল কিনা।
GCallie

1
সমস্ত আউটপু সম্পর্কিত পাথ ফিরে আসবে git rev-parse --show-toplevel। মূল সমস্যাটি ছেঁটে যাওয়া পাথকে বোঝাচ্ছিল, যা ডিফস্টেটে বিশেষত দীর্ঘ ফাইলের নাম বা এর জন্য কম মানের ক্ষেত্রে একটি সমস্যা --stat-name-width। উপরের কমান্ডগুলি পাথগুলি কেটে ফেলবে না, তবে অনুরোধ অনুসারে "পূর্ণ" পাথ প্রদর্শন করবে, যদিও এটি রিপোজিটরির মূলের সাথে সামঞ্জস্যপূর্ণ।
cmbuckley

18

বাশ ব্যবহারকারীদের জন্য, আপনি $COLUMNSস্বয়ংক্রিয়ভাবে উপলব্ধ টার্মিনাল প্রস্থটি পূরণ করতে ভেরিয়েবলটি ব্যবহার করতে পারেন :

git diff --stat=$COLUMNS

খুব দীর্ঘ পথের নামগুলি এখনও কাটা হতে পারে; এই ক্ষেত্রে, আপনি ব্যবহার করে +++ / --- অংশের প্রস্থ হ্রাস করতে পারেন --stat-graph-width, উদাহরণস্বরূপ এটি এটি টার্মিনাল প্রস্থের 1/5 এর মধ্যে সীমাবদ্ধ করে:

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))

আরও জেনেরিক সমাধানের জন্য, আপনি tput colsটার্মিনালের প্রস্থ নির্ধারণ করতে আউটপুট ব্যবহার করতে পারেন ।


2
বিশ্বায়নের কোন উপায় আছে কি --stat=$COLUMNS,$COLUMNS? প্রতিবার এটি টাইপ করা পাগল।
রুডি

@ রুডি export COLUMNSআপনার যোগ করুন ~/.bashrc, এবং আপনার ~/.gitconfigআন্ডারে [alias], যুক্ত করুনsmart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
151541

@ user151841 এটি কেবল পরিবর্তন করে diff। আমি এটিও মার্জ এবং টান ইত্যাদির জন্য কাজ করতে চাই। (সেখানে ম্যানুয়ালি এটি করতেও পারে না)) জিআইটি এটি সমর্থন করে না বলে আমি মনে করি।
রুডি

@ রুডি ওয়েল, টান বা মার্জ সম্পূর্ণ হওয়ার পরে, আপনি আগের এবং নতুন হ্যাশগুলির মধ্যে পার্থক্য করতে পারেন।
ব্যবহারকারী 151841

2
@ user151841 অবশ্যই, তবে মার্জ করা ইতিমধ্যে একটি স্ট্যাটাসের সারাংশ দেয়। পরামিতি / কনফিগার ছাড়াই। সব 'স্ট্যাট সারসংক্ষেপ' একই কনফিগার ব্যবহার করলে এটি দুর্দান্ত হবে।
রুডি

4

সেখানে একটি বিকল্প --name-only: git diff --name-only। বিকল্পটি যেমন অন্যান্য গিট কমান্ড দ্বারাও সমর্থিতshow এবং stash

বিকল্পগুলি দিয়ে পাথগুলি সংক্ষিপ্ত হয় না।


0

আমি নিম্নলিখিত গিট ওরফে তৈরি করেছি:

diffstat = ! "gitdiffstat() {  git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"

এটি tput colsকমান্ড থেকে কলামের গণনা পড়বে। এটির বিপরীতে ডিফল্ট master, তবে আপনি বিকল্পভাবে অন্য একটি শাখা নির্দিষ্ট করতে পারেন।

$ git diffstat
 .gitalias | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

0

একটি সহজ সমাধান আমি খুঁজে পেয়েছি এটি করা ছিল: (কেবল * নিক্সে কাজ করে, দুঃখিত কোনও অক্স নয়)

git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"

এই সংস্করণটি উভয়ের পক্ষে কাজ করে তবে এটি ওএসএক্সে দুর্দান্ত দেখাচ্ছে না।

git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"

-1

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

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