অন্য সংগ্রহস্থলের মধ্যে গিট সংগ্রহস্থলের সাথে কীভাবে কাজ করব?


284

আমার একটি গিট মিডিয়া সংগ্রহস্থল রয়েছে যেখানে আমি আমার সমস্ত জাভাস্ক্রিপ্ট এবং সিএসএস মাস্টার ফাইল এবং স্ক্রিপ্টগুলি রাখছি যা আমি বিভিন্ন প্রকল্পে ব্যবহার করব।

যদি আমি একটি নতুন প্রকল্প তৈরি করি যা তার নিজস্ব গিট সংগ্রহস্থলটিতে থাকে তবে আমি কীভাবে আমার নতুন প্রকল্পে আমার মিডিয়া সংগ্রহস্থল থেকে জাভাস্ক্রিপ্ট ফাইলগুলি ব্যবহার করব যাতে এটি তৈরি হয় যাতে আমি যখন পরিবর্তন করি তখন স্ক্রিপ্টের দুটি অনুলিপি আপডেট করতে হয় না ?


দয়া করে দেখুন সাবট্রি উত্তর @ Ruslan-kabalin থেকে নিচে। দ্রষ্টব্য: প্রি-কমিট (বা ওভার কমমিট ) হুক্স রবার্ট ডন্ডনের উত্থাপিত আপত্তি মোকাবেলার এক উপায়
হেজেহগ

উত্তর:


348

কীটি হ'ল গিট সাবমডিউলস

গিট কমিউনিটি বইয়ের বা ব্যবহারকারীদের ম্যানুয়ালের সাবমডিউল অধ্যায়টি পড়া শুরু করুন

বলুন আপনার কাছে প্রোপোজিটরি PROJECT1, PROJECT2 এবং মিডিয়া রয়েছে ...

cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"

অন্যান্য রেপোতে পুনরাবৃত্তি করুন ...

এখন, দুর্দান্ত জিনিসটি হল যে আপনি যে কোনও সময় মিডিয়াতে পরিবর্তন আনতে পারেন, আপনি এটি করতে পারেন:

cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"

এটি কেবল সত্যই রেকর্ড করেছে যে মিডিয়া সাবমডিউলটি উইজেট প্রজেক্ট 2 এখন XYZ সংস্করণে রয়েছে।

এটি প্রতিটি প্রকল্পে মিডিয়া কোন সংস্করণ ব্যবহার করে তা আপনাকে 100% নিয়ন্ত্রণ দেয়। গিট সাবমডিউলগুলি দুর্দান্ত, তবে আপনাকে সেগুলি সম্পর্কে পরীক্ষা করা এবং শিখতে হবে।

দুর্দান্ত পাওয়ার সাথে সাথে রাম্পে কামড় দেওয়ার দুর্দান্ত সুযোগ আসে।


এই ওয়ার্কফ্লোটি একটি প্রাইভেট NPM মডিউল ব্যবহার করে আমাকে মনে করিয়ে দেয় stackoverflow.com/questions/7575627/...
cyrf

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

3
কীভাবে এটি গিথুবের সাথে সংহত হয়?
theonlygusti

27

সাবমডিউলের পরিবর্তে সাবট্রি ব্যবহার বিবেচনা করুন , এটি আপনার রেপো ব্যবহারকারীদের জীবনকে আরও সহজ করে তুলবে। প্রো গিট বইটিতে আপনি আরও বিস্তারিত গাইড পেতে পারেন ।



3
এই নিবন্ধটি অনুযায়ী, একটি ত্রুটি হ'ল:> সুপার ও উপ-প্রকল্প কোডটি সংঘটন করার ক্ষেত্রে মিশ্রিত না করার দায় আপনার উপর পড়ে। কেউই (আইএমও) এর জন্য সময়
পাননি

20

আমি যদি আপনার সমস্যাটি ভালভাবে বুঝতে পারি তবে আপনি নিম্নলিখিত জিনিসগুলি চান:

  1. আপনার মিডিয়া ফাইলগুলিকে একটি একক গিট সংগ্রহস্থলীতে সঞ্চিত করুন, যা অনেক প্রকল্পের দ্বারা ব্যবহৃত হয়
  2. আপনি যদি আপনার স্থানীয় মেশিনের যে কোনও প্রকল্পের মিডিয়া ফাইলটি পরিবর্তন করেন তবে তা অবিলম্বে প্রতিটি অন্যান্য প্রকল্পে উপস্থিত হওয়া উচিত (যাতে আপনি সর্বদা + পুশ + টানতে প্রতিশ্রুতি দিতে চান না)

দুর্ভাগ্যক্রমে আপনি যা চান তার চূড়ান্ত সমাধান নেই, তবে কিছু জিনিস রয়েছে যার দ্বারা আপনি আপনার জীবনকে সহজ করে তুলতে পারেন।

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

আপনার যদি এটি জানার দরকার না হয় তবে সমাধানটি সহজ:

  1. মিডিয়া ফাইলগুলির জন্য এবং প্রতিটি প্রকল্পের জন্য একটি সংগ্রহস্থল তৈরি করুন
  2. আপনার প্রকল্পগুলিতে একটি প্রতীকী লিঙ্ক তৈরি করুন যা স্থানীয়ভাবে ক্লোন করা মিডিয়া ভান্ডারগুলিকে নির্দেশ করে। আপনি হয় তুলনামূলক প্রতীকী লিঙ্ক তৈরি করতে পারেন (যেমন ../media) এবং ধরে নিতে পারেন যে প্রত্যেকে প্রকল্পটি চেকআউট করবে যাতে মিডিয়া ডিরেক্টরি একই জায়গায় থাকে বা প্রতীকী লিঙ্কটির নাম .gitignore এ লিখতে পারে এবং প্রত্যেকে সিদ্ধান্ত নিতে পারে যেখানে সে মিডিয়া ফাইল রাখে।

তবে বেশিরভাগ ক্ষেত্রেই আপনি এই সংস্করণ তথ্যটি জানতে চান। এই ক্ষেত্রে আপনার দুটি পছন্দ আছে:

  1. প্রতিটি প্রকল্পকে একটি বড় ভাণ্ডারে সংরক্ষণ করুন। এই সমাধানটির সুবিধাটি হ'ল আপনার কাছে মিডিয়া সংগ্রহস্থলের কেবল 1 টি অনুলিপি থাকবে। বড় অসুবিধাটি হ'ল প্রকল্পের সংস্করণগুলির মধ্যে স্যুইচ করা আরও কঠিন (

  2. সাবমডিউলগুলি (উত্তর 1 তে বর্ণিত হিসাবে) ব্যবহার করুন। এইভাবে আপনি মিডিয়া ফাইলগুলি একটি সংগ্রহস্থলে সংরক্ষণ করবেন এবং প্রকল্পগুলিতে নির্দিষ্ট মিডিয়া রেপো সংস্করণে কেবলমাত্র একটি রেফারেন্স থাকবে। তবে এইভাবে আপনার কাছে সাধারণত মিডিয়া ভান্ডারগুলির অনেক স্থানীয় কপি থাকবে এবং আপনি সহজেই সমস্ত প্রকল্পে একটি মিডিয়া ফাইল পরিবর্তন করতে পারবেন না।

আমি যদি আপনি হতাম আমি সম্ভবত প্রথম বা তৃতীয় সমাধানটি বেছে নেব (প্রতীকী লিঙ্ক বা সাবমডিউলস)। আপনি যদি সাবমডিউলগুলি ব্যবহার করা চয়ন করেন তবে আপনার জীবন সহজ করার জন্য আপনি এখনও অনেক কিছু করতে পারেন:

  1. প্রতিশ্রুতি দেওয়ার আগে আপনি সাবমডিউল ডিরেক্টরিটির নাম পরিবর্তন করতে পারেন এবং একটি সাধারণ মিডিয়া ডিরেক্টরিতে একটি সিমলিংক রাখতে পারেন। আপনি যখন প্রতিশ্রুতিবদ্ধ হতে প্রস্তুত হন, আপনি সিমলিংকটি সরিয়ে ফেলতে পারেন এবং সাবমডিউলটি ফিরিয়ে দিতে পারেন, এবং তারপরে প্রতিশ্রুতিবদ্ধ।

  2. আপনি মিডিয়া ভান্ডারগুলির একটি অনুলিপি আপনার সমস্ত প্রকল্পের রিমোট রিপোজিটরি হিসাবে যুক্ত করতে পারেন।

আপনি স্থানীয় ডিরেক্টরিগুলি এভাবে দূরবর্তী হিসাবে যুক্ত করতে পারেন:

cd /my/project2/media
git remote add project1 /my/project1/media

যদি আপনি / আমার / প্রজেক্ট 1 / মিডিয়াতে কোনও ফাইল পরিবর্তন করেন তবে আপনি এটি প্রতিশ্রুতিবদ্ধ করতে এবং এটি কোনও দূরবর্তী সার্ভারে না ঠেকিয়ে / আমার / প্রকল্প 2 / মিডিয়া থেকে টানতে পারেন:

cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master

আপনি এই কমিটগুলি পরে মুছে ফেলার জন্য মুক্ত (গিট রিসেট সহ) কারণ আপনি এগুলি অন্য ব্যবহারকারীর সাথে ভাগ করে নি।


1
ওয়েব সম্পর্কিত প্রকল্পগুলির জন্য যেখানে আপনি আপাচের wwwফোল্ডারের মধ্যে থেকে কাজ করেন , আপনার ফোল্ডারের .htaccessমূল wwwবা আপনার প্রকল্পের মূলের মধ্যে একটি ফাইল স্থাপন করা উচিত Options +FollowSymLinks, অথবা আরও ভাল <IfModule mod_rewrite.c>{new line}Options +FollowSymLinks{new line}RewriteEngine on{new line}</IfModule> ( {new line}সত্যিকারের নতুন লাইনের সাথে প্রতিস্থাপন )

3

আমার সাবট্রিজ এবং সাবমডিউলগুলির সাথে সমস্যাগুলি পেয়েছি যা অন্যান্য উত্তরগুলি বলেছে ... মূলত কারণ আমি উত্সট্রি ব্যবহার করছি এবং এটি মোটামুটি বগি বলে মনে হচ্ছে।

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

এখানে একটি সম্পূর্ণ গাইড রয়েছে: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/

তবে মূলত আপনাকে কেবল একটি এলিভেটেড কমান্ড প্রম্পটে দুটি পাথকে এমকিঙ্কিং করতে হবে। আপনি / J হার্ড লিঙ্ক উপসর্গটি ব্যবহার করেছেন তা নিশ্চিত করুন। এই লাইন বরাবর কিছু: mklink / জেসি: \ প্রকল্পগুলি \ মূলপ্রজেক্ট \ প্লাগইন সি: \ প্রকল্পগুলি \ সোমারপ্লাগিন

আপনি আপেক্ষিক ফোল্ডার পাথগুলিও ব্যবহার করতে পারেন এবং প্রতিটি ব্যক্তি যখন প্রথম আপনার প্রকল্পটি পরীক্ষা করে দেখেন তখন এটি কার্যকর করতে একটি ব্যাটে রাখতে পারেন।

উদাহরণ: এমকিলিঙ্ক / জে। \ সম্পদগুলি \ টাকটিটিলসুলক .. \ তাকাইলহোল্টুল

ফোল্ডারটি সংযুক্ত হওয়ার পরে আপনার মূল সংগ্রহস্থলের মধ্যে যে ফোল্ডারটি এটি উল্লেখ করা হচ্ছে তা আপনাকে এড়ানো উচিত। অন্যথায় আপনি যেতে ভাল।

দ্রষ্টব্য আমি আমার সদৃশ উত্তরটি অন্য পোস্ট থেকে মুছে ফেলেছি কারণ সেই পোস্টটিতে এটির সদৃশ প্রশ্ন হিসাবে চিহ্নিত করা হয়েছিল।

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