গিট সংগ্রহস্থলে একাধিক প্রকল্প স্থাপনের জন্য সেরা অনুশীলন কী? [বন্ধ]


188

কিছু কারণ হিসাবে, আমার কেবলমাত্র ব্যবহারের জন্য একটি সংগ্রহস্থল রয়েছে
কিন্তু আমি আছে একাধিক প্রকল্প সহ javaপ্রকল্প, php scriptsএবং Androidঅ্যাপ্লিকেশান প্রকল্প।

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

সমস্যা সমাধানের জন্য কে আমাকে সেরা অনুশীলন বলতে পারে?



2
তুমি একা নও. আমার রেপোগুলির সাথে আমার একই রকম ঘটনা রয়েছে যা আমি শেখার উদ্দেশ্যে ব্যবহার করি (উদাহরণ: github.com/hopbit/java-sandbox )। আমি যে নতুন বই / টিউটোরিয়াল পড়তে শুরু করি তার উদাহরণ চেষ্টা করতে আমি নতুন রেপো তৈরি করতে চাই না ...
Łukasz Siwiński

আপনি এটি করতে চাইছেন একটি কারণ হ'ল যদি আপনি এমন একটি প্রকল্প পেয়ে থাকেন যা এমন একটি পণ্য কোড যা আপনি টেস্ট বা উত্পাদনের মতো রানটাইম পরিবেশে স্থাপন করেন product দ্বিতীয় প্রকল্পটি এমন একটি অ্যাপ্লিকেশন যা সিস্টেম পরীক্ষা করে (উদাহরণস্বরূপ বিডিডি) প্রথম প্রকল্প। এই দুটি প্রকল্পের মধ্যে ঘনিষ্ঠ সম্পর্ক রয়েছে এবং এখন আপনি একটি সংগ্রহস্থল ইউআরএল ব্যবহার করে সম্পূর্ণতা বজায় রাখতে / উল্লেখ করতে পারেন।
ল্যান্স কাইন্ড

নীচে হিসাবে সংক্ষিপ্তসার "গিটের কোনও ধারণা নেই যে এগুলি একই বা বিভিন্ন প্রকল্পের অংশ কিনা"
আহমাদেবিলব্বিবি

উত্তর:


198

যদিও বেশিরভাগ লোক আপনাকে কেবল একাধিক সংগ্রহস্থল ব্যবহার করতে বলবে, আমি মনে করি এটির অন্যান্য সমাধানগুলিও উল্লেখ করার মতো।

সমাধান ঘ

একটি একক সংগ্রহস্থলে একাধিক স্বতন্ত্র শাখা থাকতে পারে , যাকে এতিম শাখা বলা হয় । এতিম শাখা একে অপরের থেকে সম্পূর্ণ পৃথক; তারা ইতিহাস ভাগ করে না।

git checkout --orphan BRANCHNAME

এটি আপনার বর্তমান শাখার সাথে সম্পর্কিত না করে একটি নতুন শাখা তৈরি করে। প্রতিটি প্রকল্পের নিজস্ব অনাথ শাখায় হওয়া উচিত।

এখন যে কারণেই হোক না কেন, অনাথ চেকআউটের পরে গিটকে কিছুটা পরিষ্কার দরকার needs

rm .git/index
rm -r *

মুছে ফেলার আগে সবকিছু প্রতিশ্রুতিবদ্ধ তা নিশ্চিত করুন

এতিম শাখাটি পরিষ্কার হয়ে গেলে আপনি এটি সাধারণত ব্যবহার করতে পারেন।

সমাধান 2

এতিম শাখার সকল ঝামেলা এড়িয়ে চলুন। দুটি স্বতন্ত্র সংগ্রহস্থল তৈরি করুন এবং এটিকে একই দূরবর্তী স্থানে চাপ দিন। প্রতিটি রেপোর জন্য কেবল বিভিন্ন শাখার নাম ব্যবহার করুন।

# repo 1
git push origin master:master-1

# repo 2
git push origin master:master-2

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

6
আমি সমাধানটি বুঝতে পেরেছি তা নিশ্চিত না you আপনি কি বলছেন যে আপনি সমস্ত .git ফাইলকে মাস্টার গিট রেপোতে প্রতিশ্রুতিবদ্ধ করছেন? একাধিক শাখা ব্যবহার করে একাধিক এতিম শাখা ব্যবহারের মধ্যে কী আলাদা?
Nate

13
@ নাট তিনি যা বলছেন তা হ'ল দুটি পৃথক স্থানীয় সংগ্রহশালা তৈরি করুন, তারপরে এগুলি উভয়কে গিটহাবের একই দূরবর্তী সংগ্রহস্থলে রাখুন।
দ্য হাটের সাথে গাই

1
ধন্যবাদ @ দ্য গুয়ুইথথএলফ্যাট। এখন আমি এটি আবার দেখছি (9 মাস পরে) এটি আমার কাছে স্পষ্ট বলে মনে হচ্ছে। সমাধান 2 এখনও এতিম শাখা তৈরি করছে তবে আমি দেখতে পাচ্ছি যে এই পদ্ধতিটি কীভাবে মোকাবেলা করা সহজ।
রাতের

21
সমাধান 2 এর আরও ব্যাখ্যা দরকার
ইস ড্রয়েড

19

সমাধান 3

এটি একাধিক প্রকল্পের জন্য একটি একক ডিরেক্টরি ব্যবহার করার জন্য। আমি এই কৌশলটি কিছু ঘনিষ্ঠভাবে সম্পর্কিত প্রকল্পগুলির জন্য ব্যবহার করি যেখানে আমার প্রায়শই একটি প্রকল্প থেকে অন্য প্রকল্পে পরিবর্তন আনতে হয়। এটি অনাথ শাখাগুলির ধারণার মতো তবে শাখাগুলি এতিম হওয়ার দরকার নেই। কেবল একই প্রকল্পের খালি ডিরেক্টরি রাজ্য থেকে সমস্ত প্রকল্প শুরু করুন।

একটি প্রতিশ্রুতিবদ্ধ খালি ডিরেক্টরি থেকে সমস্ত প্রকল্প শুরু করুন

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

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

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

একটি খালি সংগ্রহস্থল তৈরি করুন

cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY

আপনার প্রকল্পগুলি খালি থেকে শুরু করুন।

একটি প্রকল্পে কাজ।

git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog

git add chess.prog 
git commit -m "chess program"

আর একটি প্রকল্প শুরু করুন

যখন তুমি চাও.

git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt 
git commit -m "Ph.D"

পিছনে পিছনে স্যুইচ করুন

আপনি যখনই চান প্রকল্পগুলির মধ্যে পিছনে এবং এগিয়ে যান। এই উদাহরণটি দাবা সফ্টওয়্যার প্রকল্পে ফিরে যায়।

git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog 
git commit -m "improved chess program"

বিরতিহীন ফাইলগুলি বিরক্তিকর

প্রকল্পগুলি / শাখাগুলির মধ্যে অদলবদল করার সময় আপনি অনতিযুক্ত ফাইলগুলি দ্বারা বিরক্ত হবেন।

touch untracked_software_file.prog
git checkout thesis 
ls
    philosophy_doctorate.txt  untracked_software_file.prog

এটি কোনও দুর্গম সমস্যা নয়

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

git checkout EMPTY 
ls
    untracked_software_file.prog
rm -r *
    (directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
    philosophy_doctorate.txt

আমাদের নতুন প্রকল্পটি যাচাই করার আগে ডিরেক্টরিটি ফাঁকা ছিল তা নিশ্চিত করে আমরা নিশ্চিত করেছিলাম যে অন্য কোনও প্রকল্পের কোনও হ্যাং অন্রে্যাকড ফাইল নেই।

একটি পরিমার্জন

$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty

যদি কোনও খালি ভাণ্ডার প্রতিশ্রুতিবদ্ধ যখন একই তারিখগুলি নির্দিষ্ট করা থাকে তবে স্বতন্ত্রভাবে নির্মিত খালি সংগ্রহস্থলের কমিটগুলিতে একই SHA1 কোড থাকতে পারে। এটি দুটি সংগ্রহস্থল স্বাধীনভাবে তৈরি করতে দেয় এবং তারপরে পরে একটি সংগ্রহস্থলের একটি সাধারণ মূলের সাথে একত্রে একটি গাছে একত্রিত হয়।

উদাহরণ

# Create thesis repository. 
# Merge existing chess repository branch into it

mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis

# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess

ফলাফল

একত্রিত সংগ্রহস্থলের ডায়াগ্রাম

প্রতি প্রকল্পের সাব-ডিরেক্টরি ব্যবহার করবেন?

আপনার প্রকল্পগুলি যেখানে সম্ভব সেখানে সাব-ডাইরেক্টরিজগুলিতে রাখেন, যেমন ফাইল রাখার পরিবর্তে এটিও সহায়তা করতে পারে

chess.prog
philosophy_doctorate.txt 

আছে

chess/chess.prog
thesis/philosophy_doctorate.txt 

এক্ষেত্রে আপনার অচিহ্নযুক্ত সফ্টওয়্যার ফাইলটি হবে chess/untracked_software_file.progthesisডিরেক্টরিতে কাজ করার সময় আপনি আনট্র্যাকড দাবা প্রোগ্রাম ফাইলগুলি দ্বারা বিঘ্নিত হওয়া উচিত নয় এবং আপনি অন্যান্য প্রকল্পগুলি থেকে অপ্রকাশিত ফাইলগুলি মোছা না করে যখন আপনি সুখে কাজ করতে পারেন এমন উপলক্ষগুলি খুঁজে পেতে পারেন।

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

শাখার নামগুলিতে '/' অক্ষর অন্তর্ভুক্ত থাকতে পারে

সুতরাং আপনি নিজের শাখার নামটির মতো কিছু রাখতে চাইবেন

project1/master
project1/featureABC
project2/master
project2/featureXYZ

9

আমি ব্যবহার করব git submodules

গিট সংগ্রহস্থলটিতে গিট সংগ্রহস্থলটি এখানে দেখুন

ফেব্রুয়ারী ২০১৯ অনুসারে, আমি পরামর্শ দেব Monorepos


5
"আমার কাছে ব্যবহারের জন্য কেবল একটি সংগ্রহস্থল রয়েছে" " আপনি কীভাবে একই ভাণ্ডারে বেশ কয়েকটি সাবমডিউল সংরক্ষণ করবেন তা বোঝানোর যত্ন নেবেন?
ইভান

4
git submodule add [url to git repo]- git-scm.com/book/en/v2/Git-Tools-Submodules
prasanthv

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