ডটফাইলগুলি সিমিনলিংয়ের পরিবর্তে $ হোমকে গিটে রাখার সমস্যা রয়েছে?


38

আমি বহু বছর ধরে আমার সম্পূর্ণ $HOMEডিরেক্টরিটি সাবভার্সনে চেক করে রেখেছি । এটিতে আমার সমস্ত ডটফিল এবং অ্যাপ্লিকেশন প্রোফাইল, অনেক স্ক্রিপ্ট, সরঞ্জাম এবং হ্যাকস, আমার পছন্দসই বেসিক হোম ডিরেক্টরি কাঠামো, কয়েকটি অডব্লাল প্রকল্প এবং এলোমেলো ডেটা মূল্যবান একটি গুদাম অন্তর্ভুক্ত করা হয়েছে। এটি একটি ভাল জিনিস ছিল। এটা স্থায়ী যখন.

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

আমি ঘর পরিষ্কারের প্রক্রিয়াধীন - তথ্যটি যেখানে যেখানে রয়েছে সেখানে আলাদা করে দেওয়া, পৃথক প্রকল্প হিসাবে কিছু স্ক্রিপ্ট বিভক্ত করা, কিছু ভাঙা লিঙ্ক যা স্বয়ংক্রিয় হওয়া উচিত তা ঠিক করে দেওয়া ইত্যাদি

আমার উদ্দেশ্যটি টপলেভেল চেকআউটটির subversionসাথে প্রতিস্থাপন করা , তবে আমি আমার সমস্ত সিস্টেমে ডটফাইলস, কয়েকটি ডিরেক্টরি এবং কয়েকটি বেসিক কাস্টম স্ক্রিপ্টগুলির কাছে যা চাই তা কেবল এই বিষয়গুলিকেই gitপ্যারী $HOMEকরতে চাই।

অনলাইনে পড়ার সময় অনেক লোক মনে হয় এটি সিমলিংক পদ্ধতির সাহায্যে করছেন: একটি সাব-ডিরেক্টরিতে ক্লোন করুন তারপরে $HOMEসংগ্রহশালার মধ্যে থেকে সিমলিংক তৈরি করুন । $HOMEএক দশকেরও বেশি সময় ধরে আমার সম্পূর্ণ সংস্করণ নিয়ন্ত্রণ ছিল , আমি এই প্রচারের ধারণাটি পছন্দ করি না এবং লোকেরা কেন সরাসরি চেকআউট পদ্ধতির প্রতি এত বিরক্ত বলে মনে হয় তা বুঝতে পারি না। শীর্ষস্থানীয় চেকআউট হিসাবে সুনির্দিষ্ট সম্পর্কে জানতে আমার কী সমস্যা রয়েছে?git$HOME

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


5
কৌতূহল কীসের এই বিশ্বাসের দিকে নিয়ে যায় যে $ হোমটি দ্বিতীয় চিন্তা ছাড়াই শেরে নেওয়া উচিত‽ এমনকি এনক্রিপ্ট হওয়া আরএসএর ব্যক্তিগত কীগুলিও ভাগ করা উচিত নয়।
ডার্বোবার্ট

3
যদি আপনি বাস্তবে আপনার হোম ডিরেক্টরি ডিরেক্টরিতে কেবল গিটের মধ্যে রাখার কথা বলছেন: গিট ইতিহাসের মাধ্যমে খনন করা এবং সংবেদনশীল আইটেমগুলি স্থায়ীভাবে মুছে ফেলা (গিটটি নকশা হারিয়ে যাওয়া রোধে সহায়তার জন্য ডিজাইন করা) কঠিন এবং ( এও মনে রাখবেন যে আপনি যখন শাখাগুলি স্যুইচ করেন বা কোনও পূর্ববর্তী পুনর্বিবেচনাটি চেকআউট gitকরার 644পরে আপনার ফাইলগুলির অনুমতিগুলি পরিবর্তন করে যা প্রাইভেট এসএস কীগুলির মতো জিনিসগুলির জন্য খারাপ। তবে etckeeper/ etc /
cwd

@ডারবার্ট: আমি এটি সম্পর্কে ভাল জানি। আমি OME হোম পাবলিক, কেবল ডটফিল এবং সুবিধা স্ক্রিপ্ট তৈরির কথা বলছিলাম না। এইগুলি যেখানে আমি এমন জিনিসগুলি সন্ধান করেছি যা সম্পর্কিত নয়। এবং হ্যাঁ, আমি আমার ভাগ করতে সক্ষম হওয়া উচিত .zshrc, .vimrcএবং তাদের প্রথম sanitize করেও অনুরূপ জিনিস!
কালেব

4
আপনি যদি এটি না দেখে থাকেন তবে ভিসিএস-হোম উইকি এবং মেলিং তালিকাগুলি দেখুন, যা মূলত লোকেরা ঠিক এই বিষয়ে আলোচনা করছেন - কীভাবে আপনার OME HOM কে পুনর্বিবেচনা নিয়ন্ত্রণে রাখবেন।
জিম প্যারিস

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

উত্তর:


17

হ্যাঁ , gitকোনও হোম ডিরেক্টরি পরিচালনা করার বিষয়ে বিবেচনা করার সময় কমপক্ষে একটি বড় সমস্যা রয়েছে যার সাথে উদ্বেগ নয় subversion

গিট ডিফল্টরূপে লোভী এবং পুনরাবৃত্ত হয়

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

দেখা যাচ্ছে যে, লোকেরা তাদের ডটফাইলগুলি একটি বিচ্ছিন্ন ফোল্ডারে চেকআউট করে এবং তারপরে এটিতে সিমিলিংক হয়। আপনার কোনও শিশু ডিরেক্টরিতে অন্য কিছু করার সময় এটি গিটকে বাইরে রাখে $HOME। যদিও আপনার বাড়িটিকে সাবড্রিশনে চেক করা নিখুঁতভাবে এটি পছন্দের বিষয়, যদিও গিট ব্যবহার করে এটি প্রয়োজনীয়তার বিষয় হয়ে ওঠে।

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

এই কৌশলটি প্রবাহকে কিছুটা মসৃণ করতে, কিছু দুর্দান্ত সরঞ্জাম আছে। VCS বাড়িতে মেইলিং লিস্ট জড়িয়ে জাগা টি শুরু করার জন্য বলে মনে হয় এবং পেজ সম্পর্কে howtos আর মানুষের অভিজ্ঞতার আপ একটি সুবিধাজনক মোড়ানো হয়েছে। পথ বরাবর মত কিছু ছিমছাম সামান্য সরঞ্জাম vcsh , জনাব । আপনি যদি নিজের হোম ডিরেক্টরিটি সরাসরি গিটে রাখতে চান, তবে ভিসিএসের অবশ্যই একটি সরঞ্জাম। আপনি লোকচক্ষুর অন্তরালে বিভিন্ন repostories মধ্যে বিভাজন আপনার হোম ডিরেক্টরীতে শেষ পারেন, মেশা vcshসঙ্গে mrদ্রুত এবং খুব ময়লা উপায় এটি সব একবারে পরিচালনা করার জন্য।


2
তবে কেন আপনার .gitignore ফাইলটিতে '*' যুক্ত করবেন না? ইতিমধ্যে সংগ্রহস্থলটিতে থাকা ফাইলগুলি ছাড়া গিটটি সমস্ত কিছুই উপেক্ষা করবে এবং আপনি নতুন ফাইল যুক্ত করতে পারেন git add -f <file>
ALIX

@ এলিক্স: কারণ gitসরঞ্জামগুলি আপনাকে এখনও আপনার বাড়ির ডির রেপোতে কাজ করার বিষয়টি বিবেচনা করবে এমনকি আপনি যদি কোনও উপ-ডিরেক্টরিতে থাকতেন যা কোনও প্রকল্পের জন্য পৃথক গিট রেপো ছিল। এই সমাধানটি আপনার সমস্ত হোম ডিরেক্টরিটি অন্য সমস্ত গিট কাজের সীমাবদ্ধতার বাইরে ছেড়ে দেবে।
কালেব

5
তবে আপনার .gitignore এর একটি '*' এর অর্থ হল আপনার হোম-ডির রেপোতে থাকা সমস্ত ফাইল উপেক্ষা করা হবে। এবং যখন আপনি কিছু উপ-ডিরেক্টরিতে একটি নতুন গিট রেপো পরীক্ষা করে দেখেন, তখনও সবকিছু প্রত্যাশার মতো কাজ করা উচিত (আমি মনে করি)। যতদূর আমি জানি, গিটার সরঞ্জামগুলি ডিরেক্টরি শ্রেণিবিন্যাসের উপরে যাওয়ার সময় প্রথম .git ডিরেক্টরিটি সন্ধান করবে। সুতরাং, সাব-ডিরেক্টরিতে কাজ করার সময়, সঠিক গিট সংগ্রহস্থল ব্যবহার করা হবে। অবশ্যই, আপনি যদি গিটের পরিবেশের ভেরিয়েবলগুলি ব্যবহার করেন তবে আমার ধারণা জিনিসগুলি অগোছালো হতে পারে। তবে অন্যথায়, আমি দেখতে পাচ্ছি না কেন এটি কাজ করবে না।
ALIX

@ এলিক্স ঠিক আছে। নেস্টেড গিট রেপো যতক্ষণ না আপনি পিতামাতা রেপোগুলিতে গিটিংগোর করেন ততক্ষণ ঠিকঠাক কাজ করে। আমি ভাবছি গিটের পরিবেশের ভেরিয়েবলের সম্ভাব্য সমস্যাগুলি বাদ দিয়ে খুব সাধারণ পদ্ধতির ত্রুটিগুলি কী।
evanrmurphy

1
আজ এটি নিয়ে পরীক্ষা নিরীক্ষা করা হয়েছে। আমি মনে করি এর /*চেয়ে আরও ভাল কাজ *করে কারণ এটি এখনও ডিফল্টরূপে সবকিছু উপেক্ষা করে তবে ডিরেক্টরিগুলি যুক্ত করা আরও সহজ করে তোলে। এর পরিবর্তে git add -fআমি !রেপোতে জিনিসগুলিকে স্পষ্টভাবে অন্তর্ভুক্ত করার জন্য !/.vimrcএবং !/.gitignore(.gitignore ফাইলের জন্য) এর মতো-পূর্বনির্ধারিত নিদর্শনগুলি ব্যবহার করছি ।
evanrmurphy

14

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

এটি আপনার চাই না এমন রেপোতে কিছু যুক্ত করার সম্ভাবনাও আরও বাড়িয়ে তোলে, যা আপনার সমস্ত কিছু চেক ইন করার পরে কোনও সমস্যা হত না তবে এখন সমস্যা হয়ে দাঁড়িয়েছে। আপনি যদি দুর্ঘটনাক্রমে কোনও প্রাইভেট কী ফাইল যুক্ত করেন (সম্ভবত অভ্যাসের বাইরে) এবং এটি গিথুবে চাপ দিন?

এটি বলে আমি মনে করি যে প্রাথমিক অসুবিধাগুলি আসলে প্রযুক্তিগত নয় - কেবল আমাকে নিজের থেকে বাঁচাতে চাই want

সিমলিংকিংয়ের ক্ষেত্রে: আপনি নিজের রেপোকে একটি উপ-ডিরেক্টরিতে ক্লোন করতে পারেন, এবং এমন একটি স্ক্রিপ্ট থাকতে পারে যা আপডেট করতে হবে এমন কোনও সিমলিংক আপডেট করে। যদিও এই স্ক্রিপ্টটির জন্য প্রয়োজনীয় রক্ষণাবেক্ষণের পরিমাণটি এটি হ'ল লাভের পরিমাণকে ছাড়িয়ে যেতে পারে; সিমলিংকিং কম কাজ হতে পারে।

সিমলিঙ্কগুলির সাহায্যে আপনি সহজেই ডিস্ট্রো-নির্দিষ্ট (বা এমনকি হোস্ট-নির্দিষ্ট) সংযোজন করতে পারেন যা গিটটিতে পরীক্ষা করা হয়। আপনার সিমলিংক-আপডেট স্ক্রিপ্টটি বেমানান প্ল্যাটফর্ম বা বিভিন্ন হোস্টের উদ্দেশ্যে তৈরি ফাইলগুলিকে উপেক্ষা করবে এবং কেবলমাত্র উপযুক্তগুলি আপডেট করবে।

কিছুটা এইরকম:

HOMEREPO=$HOME/homerepo
HOST=$(hostname)
UNAME=$(uname)

for dotfile in $HOMEREPO/shared/* $HOMEREPO/host-$HOST/* $HOMEREPO/uname-$UNAME/*
do
    target=$HOME/$(basename $dotfile)
    [ ! -r $target ] && ln -s $dotfile $target
done

ব্যক্তিগতভাবে: আমি সিমলিংক ব্যবহার করি এবং আমি ডিরেক্টরিগুলি সিমলিঙ্ক করি না; এর মধ্যে কেবল ফাইলগুলি। এটি আমাকে সেই ডিরেক্টরিগুলিতে সাইট-স্থানীয় পরিবর্তনগুলি করার জন্য কিছুটা নমনীয়তা দেয় (যেমন ফাইলগুলি যুক্ত / সরান)। একটি নতুন সিস্টেমে আমার অ্যাকাউন্ট সেট আপ করা ক্লান্তিকর কারণ আমাকে হাত দিয়ে সমস্ত সিমলিংক পুনরায় তৈরি করতে হবে।


gitআমি যে কোনও কমান্ড চালাচ্ছি তা হয় হোম ডিরেক্টরি নিজেই or svnএই একটি ফোল্ডার বিচ্ছিন্নতা ব্যবহার করা বেশ কার্যকর এবং এক দশকে আমার কোনও সমস্যা হয় নি। আপনার প্রথম অনুচ্ছেদটি অন্য কিছু নির্দেশ করে। এটি কীভাবে gitকাজ করে তার মধ্যে একটি পার্থক্য ?
কালেব

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

3
ওয়ান-ফোল্ডার বিচ্ছিন্নতা সত্যই বিচ্ছিন্ন করে না git- সম্পর্কে নিশ্চিত নয় svn- তবে উদাহরণস্বরূপ, git init foo && mkdir -p foo/bar/baz/spam && cd foo/bar/baz/spam && git status(বা অন্যান্য গিট কমান্ড) দেখায় যে আপনি এখনও fooসংস্করণ নিয়ন্ত্রণের প্রসঙ্গে রয়েছেন ।
এমআরবি

কনফিগস এবং স্ক্রিপ্টস: সমস্ত ডটফাইল শর্তসাপেক্ষে সমর্থন করে না, এজন্যই আমি বিকল্প পদ্ধতির পরামর্শ দিয়েছি। এগুলি এই কারণগুলির জন্য যা আমি মনে করি লোকেরা সংস্করণ নিয়ন্ত্রণ ব্যবহার না করা পছন্দ করে $HOME- এবং ডটফাইলস ইমোর জন্য সংস্করণটি সত্যই মূল্যবান নয় - তবে শেষ পর্যন্ত এটি আপনার হোম ডিরেক্টরি, তাই যদি আপনি গিট ব্যবহার করতে পছন্দ করেন এবং এগুলি আপনার জন্য সমস্যা না হয়, এটার জন্য যাও!
এমআরবি

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

6

অন্য দৃষ্টিকোণটি দেওয়ার জন্য: আমার কিছুদিন আগে থেকেই আমার $ HOM গিটের অধীনে রয়েছে এবং কোনও ত্রুটিগুলি খুঁজে পেল না। আমি অবশ্যই এই গিট রেপোকে গিথুবে সিঙ্ক করব না; আমি এমন একটি পরিষেবা ব্যবহার করি যাতে ব্যক্তিগত রেপো থাকে। আমি কোনও মিডিয়া ফাইল বা ডাউনলোড বা প্যাকেজগুলি গিট নিয়ন্ত্রণে রাখি না।

  • git status "করণীয়, পরিষ্কার" চেকলিস্ট এক ধরণের।

  • আমার কাছে ~/tmpঅস্থায়ী জিনিসগুলির জন্য একটি রয়েছে , যা গিটিংগোরড।

  • আমি এমন git statusকোনও কিছু দেখতে চাই যা সম্প্রতি ইনস্টল করা একটি সফ্টওয়্যার আমার $ HOM এ যুক্ত করার সাহস করে এবং প্রায়শই এই ফাইলগুলি মুছতে পারে, বা এমনকি অপরাধীদের আনইনস্টল করে।

  • আমি ম্যানুয়ালি সত্যিই দরকারী স্থানীয় ফাইল এবং ডায়ারগুলিতে যুক্ত করছি .gitignore, এতে 'জিনিসগুলি ইনস্টল করার সময় আপনি কী করবেন' এর সুবিধা রয়েছে।

  • যদি আমি একটি নতুন ভিএম তৈরি করি বা একটি নতুন পিসি ইনস্টল করি, আমি কেবলমাত্র আমার দূরবর্তী বাড়িটিকে to HOM এ ক্লোন করে দিয়েছি এবং আমার হাতে সমস্ত প্রয়োজনীয় জিনিস অবিলম্বে পেয়ে গেছে।

  • ভিম প্লাগইনগুলির জন্য ভান্ডেলের মতো জিনিসগুলি আর প্রয়োজন হয় না।

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

এই পদ্ধতিতে বর্তমানে মেশিনগুলি: হোম ল্যাপটপ, ওয়ার্ক পিসি, ওয়ার্ক ভিএম, প্লাস 3 বা 4 রিমোট সার্ভার।


আপনার বাড়ির ভিতরে কি অন্য কোনও গিট চেকআউট আছে?
কালেব

না, আমি অন্যান্য জিনিসগুলিকে একটি / ওয়ার্ক ডিরেক্টরিতে রেখেছি এবং ভিম পগিনগুলির মতো ছোট সরঞ্জামগুলি ক্লোন করি না।
জিবি

1
আমার একটি ~ / সাইটের ভিতরে কাজ আছে এবং পাশাপাশি এই পদ্ধতিটিও করি, নেস্টেড গিট রেপো নিয়ে কোনও সমস্যা নেই
ফিলিফ্রেও

1
আমি এই সেটআপটি কিছুক্ষণ ব্যবহার করছি। আমার একটি 'ওরফে স্কো = গিট স্ট্যাটাস-ইউনো' আছে এবং .gitignore (খুব বেশিবার আমি সমস্ত ক্রফটি একবার দেখে নিই এবং তারপরে "মেহ" বলি) নিয়ে বেশি বিরক্ত করি না। নেস্টেড গিট রিপো নিয়ে আমার কখনও সমস্যা হয়নি। আমার একটি প্রাইভেট সার্ভার রয়েছে যেখানে আমি একটি কাজ করেছি git init --bareযা আমি ওপরে চাপিয়ে দিয়েছি (যদিও আমি রেপোতে পাসওয়ার্ড রাখি না, সেখানে আমার নোটের ফাইল আছে)।
অহংকার

5

আমি উভয়ই চেষ্টা করে দেখেছি এবং শেষ পর্যন্ত সিমলিংক পদ্ধতির পছন্দ করেছি :

  • যেখানেই পরীক্ষা করুন
  • make install
  • এক্স সেটিংস লোড করতে লগ আউট এবং আবার প্রবেশ করুন

অসুবিধা:

  • আছে ফাইল সরানো তাদের যোগ করার আগে রেপো থেকে
  • মেকফাইলে প্রতীকী লিঙ্কগুলির তালিকা বজায় রাখতে হবে

সুবিধাদি:

  • বিশালাকার দরকার নেই .gitignore( ~আমার নম্র উবুন্টু বাক্সে আমার 133 ডটফাইল রয়েছে )
  • রক্ষণাবেক্ষণ স্ক্রিপ্ট এবং অন্যান্য ~সম্পর্কিত জিনিসগুলি (যেমন Makefileএবং cleanup.sh) বাইরে রাখতে পারেন
  • সংস্করণ পৃথকভাবে ব্যক্তিগত এবং সর্বজনীন সেটিংস নিয়ন্ত্রণ করতে পারে

সীমাবদ্ধতা:

  • @ এমআরবি'র বিপরীতে, আমি কেবলমাত্র মধ্যে সিমলিঙ্ক তৈরি করি ~। এটি সিলেমিংকে সহজ রাখে এবং উদাহরণস্বরূপ ~/.vimখুব বিরল .gitignoreরক্ষণাবেক্ষণের জন্য নতুন ফাইলগুলি লক্ষ্য করা একেবারে তুচ্ছ করে তোলে ।

এটি শেষ দুটি সুবিধাগুলি আমার ক্ষেত্রে আঁশগুলিকে সাফল্য দিয়েছিল - আমি হোম ডিরেক্টরিটি বিশৃঙ্খলা করতে চাই না, এবং আমি ব্যক্তিগত এবং পাবলিক সামগ্রীগুলি পৃথক পৃথক রাখতে চাই।

আমার জানা একমাত্র অ্যাপ্লিকেশন যার মধ্যে সিমলিংকগুলি পরিচালনা করার ক্ষেত্রে সমস্যা ছিল (বা কমপক্ষে ছিল) ছিল পিডগিন - এটি আমার ফর্মগুলি সাধারণ ফাইলগুলির সাথে ওভাররাইট করে চলেছে।


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

3

এখানে একটি: আপনি যদি চেষ্টা করার চেষ্টা করেন git rebase -i --rootএবং আপনার .gitconfigসংগ্রহশালায় প্রথম প্রতিশ্রুতিটি পরীক্ষা করে দেখেছেন, গিটটি সাময়িকভাবে .gitconfigফাইলটি সরিয়ে ফেলবে , যার ফলে এটি আপনার নাম এবং আপনার ইমেলটির প্রয়োজন হওয়ায় এটি রিবেস কার্যক্রম শেষ করতে অক্ষম করবে make যে, যে ফাইলে সংরক্ষণ করা হয়।

আপনি আবার এগুলি আবার কনফিগার করতে পারেন এবং করতে পারেন git rebase --continue, তবে আমি এটি করার পরে এবং রিবেস অপারেশন শেষ করার পরে, আমার গিট সংগ্রহস্থল কমিটের বার্তা ছাড়াই একটি খালি কমিট অর্জন করেছিল যা পূর্বে ভান্ডারটিতে প্রথম কমিট ছিল, যা আমি জানি না কিভাবে পরিত্রাণ পেতে।

আপনি যদি এর git rebase -i <commit>পরিবর্তে করেন তবে কী হয় তা আমি জানি না এবং .gitconfigপরে কোনও প্রতিশ্রুতি দিয়ে একসাথে চেক করা হয় <commit>

সম্ভবত সহজ সমাধানটি হ'ল .gitconfigসংগ্রহস্থলটিতে যুক্ত হওয়া থেকে বিরত থাকুন এবং এর পরিবর্তে এটি তালিকাভুক্ত হন .gitignore


2

আমি এটি এইভাবে করি:

  1. একটি পরিষ্কার লিনাক্স ইনস্টল করুন (প্রয়োজনীয় নয়, তবে চতুর্থ ধাপে জীবন আরও সুখকর করে তোলে)
  2. ইত্যাদি ইনস্টল করুন
  3. চালানো git initআপনার বাড়িতে
  4. .gitignore তৈরি করুন এবং এমন সমস্ত কিছু যুক্ত করুন যা দেখে মনে হচ্ছে এটি আপনার আগ্রহী নয় বা এটি অনেকটা পরিবর্তিত হতে পারে। ভালো জিনিস যোগ করতে ভুলবেন না *.cache, *.lockইত্যাদি আমি যুক্ত করার প্রস্তাব দিই না/*কারণ আপনার বাড়িতে নতুন কিছু যুক্ত হওয়ার পরে আপনাকে স্বয়ংক্রিয়ভাবে অবহিত করা হবে না। এটি একটি কালো তালিকা রয়েছে বনাম হোয়াইটলিস্ট পদ্ধতির, যেখানে আমি মূলত অস্থির স্টাফ এবং আমার যত্ন নেই এমন কিছু সফ্টওয়্যার বাদে সমস্ত সফ্টওয়্যারের জন্য আমার কনফিগারেশন রাখতে চাই। আপনি যখন পরে মার্জ করবেন, স্থানান্তর করুন বা সিস্টেমগুলি তুলনা করুন, সমস্ত কিছু আলাদা করতে সক্ষম হওয়া বেশ সহজ being আপনার কেবল নতুন সিস্টেমগুলি সেট আপ করতে পারেন যদি আপনার কাছে কেবলমাত্র .bashrc এবং কয়েকটি অন্যান্য ডটফাইল সঞ্চিত থাকে। এইভাবে আপনি কনফিগারেশনটি চালিয়ে যাবেন যা আপনি অন্যথায় জিইউআইয়ের মাধ্যমে সেট করতে পারেন এবং কোন ডটফিলস সেটিংস সংরক্ষণ করে তা অজানা। (যদি এটি কখনও দেখা দেয় যে আপনি অস্থির ফাইল প্রতিশ্রুতিবদ্ধ করেছেন তবে আপনি এখনও গিটকে অপরিবর্তিত ধরে নিতে বলতে পারেন)
  5. চালান etckeeper init -d /home/username
  6. চালান git commit -d /home/username
  7. কমান্ড লাইনটিকে আরও সুন্দর করার জন্য আপনার শেলটিতে উপকরণ স্থাপন করুন homekeeper checkout

অ্যাডকিপার ব্যবহারের কারণ হ'ল এটি আপনার ফাইলগুলির অনুমতিগুলির মতো মেটাডেটা সংরক্ষণ করবে (এসএসএস কীগুলির মতো নির্দিষ্ট জিনিসের জন্য গুরুত্বপূর্ণ)। আপনার এখন একটি প্রাক কমিট হুক থাকা উচিত যা মেটাডেটা স্বয়ংক্রিয়ভাবে সংরক্ষণ করবে। পোস্ট-চেকআউট সম্পর্কে আমি এতটা নিশ্চিত নই। আপনার সম্ভবত ব্যবহার করা উচিত etckeeper checkout xxx -d /home/userআমি এটিকে আরও কিছুটা অনুসন্ধান করব এবং এই উত্তরটি বিস্তারিতভাবে বর্ণনা করব।


-1

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


আসলে ভুল না হলে এটি বিভ্রান্তিকর ading গিট ডিফল্টরূপে অনুমতি সহ অনেকগুলি ফাইল বৈশিষ্ট্য সংরক্ষণ করে। আমি .sshকোনও সমস্যা ছাড়াই এখন বেশ কিছুক্ষণ ধরে গিট রাখছি , সঠিক সুরক্ষিত অনুমতিগুলি সংরক্ষণ করা হয়েছে। এটি বেস কনফিগারেশনে যা করে না তা হ'ল মালিকানা বা টাইমস্ট্যাম্পগুলি সংরক্ষণ করা; তবুও যদি এর কোনওটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে সমস্যা হয় তবে এমন প্লাগইন রয়েছে যা এই অতিরিক্ত বৈশিষ্ট্যগুলিকে নিয়মিত ওয়ার্কফ্লোয়ের অংশ হিসাবে পরিচালনা করতে পারে (মেটাস্টোর বা গিট-ক্যাশে-মেটা দেখুন)।
কালেব

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

-1

গিট-ভিত্তিক সমাধান বিশেষত কার্যকর যদি আপনার ফাইলগুলি বিভিন্ন মেশিনে স্থাপন করতে হয় এবং এরপরেও আপনার যদি সমস্ত মেশিনের সাধারণ অংশ এবং কিছু যন্ত্রের সাথে নির্দিষ্ট অংশ থাকে তবে have আপনি একাধিক সংগ্রহস্থল তৈরি করতে পারেন এবং একই ডিরেক্টরিতে ক্লোন করতে মাল্টিগিট বা ভিসিএসের মতো একটি সরঞ্জাম ব্যবহার করতে পারেন (এক্ষেত্রে আপনার বাড়ির দির)।


ধন্যবাদ, তবে আপনি প্রশ্নটি মিস করেছেন। আমি এর ব্যবহারগুলি সম্পর্কে ভালভাবে অবহিত (সুতরাং কেন আমি এটি প্রথম স্থানে করতে চেয়েছিলাম), এই প্রশ্নটি ছিল গিট দিয়ে এই কাজটি করার ক্ষেত্রে নতুন কারওরই ক্ষতি সম্পর্কে (যেমন আমি যখন জিজ্ঞাসা করেছি তখন) সচেতন না হতে পারে । এটি মোটেই এই প্রশ্নের উত্তর বলে মনে হচ্ছে না।
কালেব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.