বাইনারি ফাইলের সাথে কি গিট ভাল?


101

বাইনারি ফাইলের সাথে কি গিট ভাল?

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

বাইনারি ফাইলগুলির সাথে যদি গিটটি ভাল না হয় তবে আমি কোন সরঞ্জামটি বিবেচনা করব?


4
বাইনারি সহ খুব ভাল - আমি নিজে এটি ব্যবহার করি
tekknolagi

এটা সত্যি সত্য। আপনি নিজের / বাড়িটাকে গিট সংশোধন করতে পারেন এবং এটি বেশ ভালভাবে কাজ করা উচিত।
Loïc Faure-Lacroix

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

4
: নোট: আপনি এখন Git-LTS আপনার বাইনেরিতে অন্যত্র সংরক্ষণ করতে হবে, stackoverflow.com/a/29530784/6309
VonC

4
এটি .git ফোল্ডারটি ফুলে যায়?
পোরকুপাইন

উত্তর:


49

বাক্সের বাইরে, গিট সহজেই তার সূচীতে বাইনারি ফাইলগুলি যুক্ত করতে পারে এবং এগুলি দক্ষ উপায়ে সংরক্ষণ করতে পারে যদি না আপনি বড় আকারের সঙ্কোচনযোগ্য ফাইলগুলিতে ঘন ঘন আপডেট না করেন।

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

বাইনারি ফাইলের পরিবর্তনগুলি যথেষ্ট বিরল কিনা তা আপনি স্থির করতে পারবেন যেগুলি সংযোজন, প্রত্যাবর্তন, চেরিপিক্সের সাথে জড়িত সাধারণ গিট ওয়ার্কফ্লোতে ঘটে এমন অতিরিক্ত ম্যানুয়াল কাজের সাথে আপনি বেঁচে থাকতে পারেন।


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

15
গিট অর্থপূর্ণ ভিন্নতা তৈরি করতে পারে। এর সাথে তৈরি একটি ডিফ git diff --binaryবাইনারি ফাইলগুলি প্যাচ করতে সক্ষম হবে।
সিবি বেইলি

47

অন্যান্য উত্তর ছাড়াও।

  • তথাকথিত বাইনারি ডিফ ফর্ম্যাটটি ব্যবহার করে আপনি বাইনারি ফাইলে একটি ডিফ পাঠাতে পারেন । এটি মানব-পঠনযোগ্য নয় এবং এটি কেবল তখনই প্রয়োগ করা যেতে পারে যদি আপনার ভাণ্ডারটিতে যথাযথ প্রিমাইজ থাকে, অর্থাত্ কোনও ঝোঁক ছাড়াই।
    একটি উদাহরণ:

    diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
    index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
    GIT binary patch
    delta 85
    zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
    nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
    
    delta 135
    zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
    zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
    hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
    
  • বাইনারি ফাইল বা বাইনারি ফাইলের কিছু অংশের জন্য মানব-পঠনযোগ্য ডিফার্ট দেখানোর জন্য আপনি পাঠ্যকনভ গিটট্রিবিউট ব্যবহার করতে পারেন git diff। উদাহরণস্বরূপ * .jpg ফাইলগুলির জন্য এটি এক্সআইএফ তথ্যের মধ্যে পার্থক্য হতে পারে, পিডিএফ ফাইলগুলির জন্য এটি তাদের পাঠ্য উপস্থাপনের মধ্যে পার্থক্য হতে পারে (পিডিএফ 2 টেক্সট বা এর মতো কিছু)।

এইচটিএইচ।


4
আমাকে গিটারট্রিবিউট সম্পর্কে শেখানোর জন্য প্রচুর ধন্যবাদ! সম্ভাবনার সম্পূর্ণ নতুন বিশ্ব উন্মুক্ত করে।
hermannloose

15

যদি আপনি সত্যিই বড় বাইনারি ফাইল পেয়ে থাকেন তবে আপনি সংগ্রহশালার বাইরে ডেটা সঞ্চয় করতে গিট-এনেক্স ব্যবহার করতে পারেন। চেক আউট: http://git-annex.branchable.com/


6
গিট-অ্যানেক্সটি বেশ দুর্দান্ত, তবে সম্ভবত এমন ফাইলগুলির জন্য আরও বেশি উপযুক্ত যেগুলি প্রায়শই পরিবর্তন হয় না , যেমন, সংগীত ফাইল, ছবি, পিডিএফ সংগ্রহ, ...
sr_

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

5

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

আপনি যদি ফটোশপ / ইলাস্ট্রেটর ডকুমেন্টের মতো কিছুতে সংস্করণ নিয়ন্ত্রণ করতে চান তবে গ্রিডআইরন ফ্লো আপনার জন্য কৌশলটি করতে পারে। আপনি যদি তাদের মেশিনের মধ্যে সিঙ্কে রাখার চেষ্টা করছেন তবে ড্রপবক্স বা Rsync এটিকে পরিচালনা করতে পারে তবে তারা বুদ্ধিমান ডিফ-ইনগিং করতে যাচ্ছেন না।


4
গিট সম্প্রদায়ের বই থেকে ( book.git-scm.com/7_how_git_stores_objects.html ): "সেই স্থানটি সংরক্ষণ করার জন্য, গিট প্যাকফিলটি ব্যবহার করে This এটি এমন একটি ফর্ম্যাট যেখানে গিট কেবলমাত্র সেই অংশটি সংরক্ষণ করবে যা দ্বিতীয় ফাইলটিতে পরিবর্তিত হয়েছে , ফাইলটির পয়েন্টার সহ এটি অনুরূপ ""
ওয়েইন কনরাড

4
হ্যাঁ, এটি যদি আপনি / যখন git gcআবর্জনা সংগ্রহ করতে দৌড়ে যান। একই পৃষ্ঠা থেকে: "যেহেতু গিট প্রতিটি ফাইলের প্রতিটি সংস্করণকে পৃথক বস্তু হিসাবে সংরক্ষণ করে, এটি বেশ অকার্যকর হতে পারে gine কল্পনা করুন যে কয়েক হাজার লাইনের দীর্ঘ একটি ফাইল রয়েছে এবং একটি একক লাইন পরিবর্তন করে G গিট দ্বিতীয় ফাইলটি সম্পূর্ণরূপে সংরক্ষণ করবে, যা জায়গার একটি দুর্দান্ত বর্জ্য "
কোরিউড

4
ফর্সা 'nuff। git এখন থেকে স্বয়ংক্রিয়ভাবে gc করে না তারপরে, অন্তত আমি যে প্রকল্পের জন্য এটি ব্যবহার করি তার জন্য। কখন চলতে হবে তা নির্ধারণ করতে এটি কোন মেট্রিক ব্যবহার করে তা আমি জানি না - সম্ভবত এমন গাছ রয়েছে যা কখনই (বা কদাচিৎ) ট্রিগার জিসি না করে।
ওয়েইন কনরাড 15

4
ম্যান পেজ থেকে git gc: "ব্যবহারকারীরা ভাল ডিস্ক স্পেসের ব্যবহার এবং ভাল অপারেটিং পারফরম্যান্স বজায় রাখতে প্রতিটি সংগ্রহস্থলের মধ্যে নিয়মিত এই কাজটি চালানোর জন্য উত্সাহিত করা হয়। কিছু গিট কমান্ড স্বয়ংক্রিয়ভাবে গিট জিসি চালাতে পারে; বিশদ বিবরণের জন্য নীচে - অটো পতাকা দেখুন "
জ্যাকব আকারবুম

4
@ কেনিভিট এখন একটি টন আছে। সারাংশ এক, এবং Kactus অন্য যে ব্যবহারসমূহ লোকচক্ষুর অন্তরালে Git হয়।
কোরিয়ার্ড

4

ভাল গিট বাইনারি সঙ্গে ভাল। তবে এটি টেক্সট ফাইলের মতো বাইনারিগুলি পরিচালনা করবে না। এটি আপনি বাইনারি ফাইলগুলি মার্জ করতে চান এমন। আমি বোঝাতে চাইছি, জেপিগের মধ্যে একটি ভিন্নতা আপনাকে কখনই কিছু ফিরিয়ে দেবে না। গিট টেক্সট ফাইলের সাথে খুব ভাল কাজ করে এবং বাইনারি ফাইলগুলির সাথে প্রতিটি অন্যান্য সমাধানের মতোই খারাপ!


2

if you want a solution for versioning you might wanna consider git-lfs that has a lightweight pointer to your file.

it means when you clone your repo it doesnt download all the versions but only the one that is checked-out.

Here's a nice tutorial of how to use it

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