আমি গিটে বাইনারি ফাইলগুলি কীভাবে পৃথক করতে পারি?


28

গিটে বাইনারি ফাইলগুলি পৃথক করার জন্য, আমি ধরে নিই যে আমার একটি ডিফ্টল সেটআপ করা দরকার।

ডিফ্টলগুলি কী কাজ করে? আপনি কীভাবে পরামিতিগুলি রাখবেন?


বাইনারি ফাইলের একটি পৃথক সরঞ্জাম থেকে আপনি কি ধরণের আউটপুট পেতে আশা করছেন? এটি কোন ধরণের বাইনারি ফাইল? এটি কি এমন কিছু যা কোনও পাঠ্য বিন্যাসে রেন্ডার করা যায় এবং তারপরে তুলনা করা যায়?
জোরডেচে

উত্তর:


22

আপনি textconvএকটি ফাইল টাইপের জন্য একটি কনফিগার বিকল্প সেট করতে পারেন । গিটাট্রিবিউটস (5) এ "বাইনারি ফাইলগুলির পাঠ্য পৃথক করে" দেখুন । আপনার যা ব্যবহার করা উচিত তা ফাইল টাইপের উপর নির্ভর করে।

উদাহরণ 1 :

বলুন আপনি জিপ ফাইলগুলির বিষয়বস্তু আলাদা করতে চান। সেক্ষেত্রে আপনার নিম্নলিখিত দুটিটি $ GIT_DIR / কনফিগারেশন ফাইল বা OME HOME / .gitconfig এ রাখা উচিত।

[diff "zip"]
    textconv = unzip -v

পরের বার আপনি কোনও রেপোতে জিপ ফাইলে আলাদা করার জন্য জিজ্ঞাসা করবেন, এটি unzip -vউভয় সংস্করণে কল করবে এবং ফলাফলের পাঠ্যকে পৃথক করবে।

উদাহরণ 2 :

পিডিএফ ফাইলের জন্য আপনি যেমন ব্যবহার করতে পারেন pdfinfo;

[diff "pdf"]
    textconv = pdfinfo

উদাহরণ 3 :

যদি কোনও ফাইল টাইপের জন্য নির্দিষ্ট কোনও ইনোমেশনেশন ইউটিলিটি না থাকে তবে আপনি যেমন ব্যবহার করতে পারেন hexdump(ফ্রিবিএসডি এবং ওএসএক্সের সাথে আসে, লিনাক্সেও উপলভ্য):

[diff "bin"]
    textconv = hexdump -v -C

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

@ নিকরেটাল্যাক: যুক্ত উদাহরণগুলি দেখুন।
রোল্যান্ড স্মিথ

2
আমি আমার গিট কনফিগারেশনে উদাহরণ 3 যুক্ত করেছি, তবে আমি যখন "গিট ডিফ" করি তখনও এটি আমাকে একই সংক্ষিপ্ত বার্তা দেয়: "বাইনারি ফাইলগুলি একটি / ফাইল এবং বি / ফাইল পৃথক করে"
নিক রেটাল্যাক

1
আপনি যদি লিবমাজিক ব্যবহার করতে চান তবে আপনাকে গিট সোর্স কোডটি খতিয়ে দেখতে হবে যে এটি কাজ করে কিনা ...
রোল্যান্ড স্মিথ

5
পরিশেষে আমি কাজ এই পেয়েছিলাম, আমার .gitattributes যোগ * .bin পরিবর্তন = বিন পর
জাস্টিন রো

11

রোল্যান্ড স্মিথের উত্তরটি সহায়ক ছিল কিন্তু বর্তমানে অসম্পূর্ণ (মন্তব্যগুলি দেখুন) - এর দুটি অংশ রয়েছে।

আপনি আপনার সংগ্রহস্থলের .git/configফাইল বা আপনার ব্যক্তিগত গ্লোবাল ~/.gitconfigফাইলে একটি নতুন ডিফ কমান্ড সংজ্ঞায়িত করতে পারেন , উদাহরণস্বরূপ একটি হেক্স ডিফ কমান্ড ব্যবহার করে hexdump:

[diff "hex"]
    textconv = hexdump -v -C
    binary = true

এর পরে, আপনাকে .gitattributesএই বিশেষ ডিফ কমান্ডের সাহায্যে কোন ফাইলগুলি ব্যবহার করা উচিত তা গিটকে জানাতে আপনার সংগ্রহস্থলের ফাইলটি ব্যবহার করতে হবে:

# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex

.gitignoreফাইলের মতো, ফাইলটি .gitattributesআপনার সংগ্রহস্থলের মধ্যে পরীক্ষা করা উচিত।

আমার ক্ষেত্রে আমার বিভিন্ন ফাইল এক্সটেনশন রয়েছে যা আমি বাইনারি হিসাবে বিবেচনা করতে চাই (উদাহরণস্বরূপ উইন্ডোজে গিট ব্যবহার করা হলে কোনও লাইন শেষ হওয়া কোনও রূপান্তর এড়ানো), এবং এর মাধ্যমে কোনও পার্থক্যও দেখুন hexdump:

https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d

চিত্র ফাইলগুলির সাথে ব্যবহারের জন্য হেক্সডাম্প ডিফ্ট কমান্ড সংজ্ঞায়িত করার জন্য অন্য উদাহরণের জন্য https://github.com/resin-io/etcher/pull/1367 দেখুন ।


আপনি .gitattributesবিশ্বব্যাপীও সেট করতে পারেন ( [diff]আপনার বিশ্বব্যাপী এন্ট্রিগুলি বরাবর যেতে .gitconfig)। আপনি যদি .gitattributesস্থানীয়টিকে রেপোতে পরিণত করেন তবে ব্যবহারকারীকে তার স্থানীয় .gitconfigরেপো সেটিংস সংশোধন করতে হবে কারণ সুরক্ষার কারণে সেগুলি রিমোটে চাপানো হবে না। যে কোনও উপায়ে, প্রতিটি ব্যবহারকারীর এই আচরণটি সক্ষম করতে তাদের স্থানীয় ফাইলগুলি / কনফিগারেশন আপডেট করতে হবে। ইন .gitconfigঅধীনে [core]অ্যাড attributesfile = c:/users/<username>/.gitattributesবা যেখানেই আপনি যদি আপনি এটি বিশ্বব্যাপী (forwardslashes করে মনে রাখবেন, জানালা এমনকি) এটিকে সঞ্চয় করতে চান।
লাইটসিসি

10

আপনি যদি গিটকে বাইনারি ফাইলগুলি পৃথকভাবে পাঠানোর জন্য পৃথক ব্যবহারের --textবিকল্প হিসাবে প্রদর্শন করতে বাধ্য করতে চান :

git diff --text

-1

উপরেরগুলি এগুলি করার জন্য বিস্তৃত উপায় .. তবে, কয়েকটি ফাইলের জন্য আপনার যদি এটি করা দরকার হয় তবে নীচের পদ্ধতিটি আমি ব্যবহার করি:

git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file

এখানে আমি ব্যবহার করছি vimdiffতবে আপনি অন্য কোনও সরঞ্জাম ব্যবহার করতে পারেন। যদি আপনার বারবার এটির প্রয়োজন হয় তবে উপরেরগুলি একটি ছোট স্ক্রিপ্টের সাথেও সংযুক্ত করা যেতে পারে।


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