কীভাবে আমি একটি উপ-ডিরেক্টরিতে একটি সাব মড্যুল যুক্ত করব?


309

আমার এতে গিট রেপো রয়েছে ~/.janus/যার মধ্যে একগুচ্ছ সাবমডিউল রয়েছে। আমি একটি submodule যোগ করতে চান ~/.janus/snipmate-snippets/snippets/, কিন্তু যখন আমি চালানোর git submodule add <git@github.com:...>মধ্যে snipmate-snippetsডিরেক্টরি, আমি নিম্নলিখিত ত্রুটির বার্তা পাবেন:

You need to run this command from the toplevel of the working tree.

সুতরাং প্রশ্নটি হল: আমি কীভাবে snipmate-snippetsডিরেক্টরিতে একটি সাব মড্যুল যুক্ত করব ?


সাবমডিউল কমান্ডগুলির জন্য গিট রেপোর রুট ডিরেক্টরিতে যাওয়া আর প্রয়োজন হবে না (শীঘ্রই)। দেখুন নিচের আমার উত্তর
VonC

3
git submodule add -b <branch> <url> <relative_path_4m_root>
প্যারাসরিশ

উত্তর:


437

আপনি প্রবেশ করুন ~/.janusএবং চালান:

git submodule add <git@github ...> snipmate-snippets/snippets/

আপনার যদি সাবমডিউলগুলি (বা সাধারণভাবে গিট) সম্পর্কে আরও তথ্যের প্রয়োজন হয় তবে প্রজিট বেশ কার্যকর।


যোগ করার সময় শাখা যুক্ত করা ভাল ধারণা বলে মনে হয় অন্যথায় হেড সহজেই বিচ্ছিন্ন হয়ে যায়: গিট সাবমডিউল অ্যাড-বি <
ফ্রেঞ্চ

1
আমার জন্য এটি হ'ল 'subprojects' already exists in the index (আমি ডিরেক্টরিটির নাম হিসাবে সাবপ্রজেক্টগুলি ব্যবহার করছিলাম) । পরিবর্তে যা সাহায্য করেছে, তা ভোনকের উত্তর নীচে, অর্থাত্ করণা cd subprojectsএবং তারপরে git submodule add <get@github …>কোনও পথ ছাড়াই।
হাই-এঞ্জেল

83

নোট করুন যে git1.8.4 (জুলাই 2013) থেকে শুরু করে , আপনাকে আর রুট ডিরেক্টরিতে ফিরে যেতে হবে না।

 cd ~/.janus/snipmate-snippets
 git submodule add <git@github ...> snippets

( বাউকে ভার্সটিঘ মন্তব্য করেছেন যে আপনাকে ব্যবহার করতে হবে না /., যেমন রয়েছে snippets/.: snippetsযথেষ্ট)

কমিট 091a6eb0feed820a43663ca63dc2bc0bb247bbae দেখুন :

সাবমডিউল: শীর্ষ স্তরের প্রয়োজনীয়তা বাদ দিন

rev-parse --prefixসাবমোডিয়াল কমান্ডের দেওয়া সমস্ত পাথ প্রক্রিয়া করার জন্য নতুন বিকল্পটি ব্যবহার করুন , এটি প্রয়োজনীয়তা এড়াতে হবে যে এটি সংগ্রহস্থলের শীর্ষ-স্তর থেকে চালানো যেতে পারে।

যেহেতু আপেক্ষিক সাবমডিউল ইউআরএলটির ব্যাখ্যা " remote.origin.url" কনফিগার করা আছে কিনা তার উপর নির্ভর করে git submodule add, কার্যকারী গাছের শীর্ষ স্তরে না থাকলে স্পষ্টতই আপেক্ষিক URL গুলি " " এ ব্লক করুন block

সাইন-অফ-বাই: জন কিপিং

প্রতিশ্রুতি 12b9d32790b40bf3ea49134095619700191abf1f উপর নির্ভর করে

এটি ' git rev-parse' আচরণ করে তোলে যেন এটি কোনও সংগ্রহস্থলের নির্দিষ্ট সাব-ডাইরেক্টরি থেকে শুরু হয়েছিল, পার্থক্যের সাথে যে কোনও ফাইল পাথ যেটি প্রিন্ট করে তা কার্যকারী গাছের উপরের দিক থেকে পুরো পাথের সাথে উপসর্গযুক্ত থাকে

এটি শেল স্ক্রিপ্টগুলির জন্য দরকারী যেখানে আমরা cdকার্যকরী গাছের শীর্ষে যেতে চাইব তবে কমান্ড লাইনে ব্যবহারকারী প্রদত্ত আপেক্ষিক পাথ পরিচালনা করতে হবে।


দুর্দান্ত ধন্যবাদ! আমি লক্ষ্য করেছি যে /.অনুচ্ছেদটি প্রয়োজনীয় নয়, গিট এটি ছাড়াই ডিরেক্টরি স্নিপেট তৈরি করবে।
বুক ভার্স্টিঘ

পছন্দ করুন আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভনসি

আমি গিট সংস্করণ ২.7.৪ এ আছি তবে তবুও আমি এই ত্রুটি বার্তা পাচ্ছি Relative path can only be used from the toplevel of the working tree। আমি করছিgit submodule add ../../../functest
ফ্লাইংওরা

@ ব্যবহারকারী 342626358 হ্যাঁ, এটি প্রত্যাশিত: গিট সাবমুডুয়াল করার ক্ষমতা সম্পর্কে ওএসের উত্তরটি কেবল তার মূল ফোল্ডার থেকে নয়, মূল রেপোর যে কোনও সাবফোল্ডার থেকে যুক্ত করে। এটি কোনও আপেক্ষিক পথের সাথে সাবমডিউল রিমোট রেপোকে উল্লেখ করার বিষয়ে নয় । যদি আপনি তা করেন তবে আপনি যে ত্রুটি বার্তাটি দেখছেন তা পেয়ে যাবেন।
ভনসি

@ ব্যবহারকারী 342635358 এবং যাইহোক, সেই ত্রুটি বার্তাটি (যা আপনি দেখতে পান: " Relative path can only be used from the toplevel of the working tree") মূল প্রশ্ন (" ") থেকে এক নয়You need to run this command from the toplevel of the working tree
ভোনসি

17

আমার একই রকম সমস্যা ছিল তবে আমি জিইআইআই সরঞ্জামগুলি দিয়ে নিজেকে একটি কোণে আঁকিয়েছি।

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

এই জগাখিচুড়ি থেকে বেরিয়ে আসার জন্য আমাকে গিটকে সাবফোল্ডারটি (ফাইলগুলি মোছা ছাড়াই) ট্র্যাকিং বন্ধ করতে বলতে হয়েছিল :

proj> git rm -r --cached ./ui/jslib

তারপরে আমাকে এটি জানাতে হয়েছিল যে সেখানে একটি সাবমডিউল ছিল (যা বর্তমানে গিট দ্বারা ট্র্যাক করা কিছু থাকলে আপনি এটি করতে পারবেন না):

proj> git submodule add ./ui/jslib

হালনাগাদ

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

proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib

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

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

সুতরাং, সরানো, ধাক্কা, গিট অ্যাড সাবমডিউল, সবচেয়ে পরিষ্কার বিকল্প।


16

আপনারা যারা কনফিগার ফাইলগুলি ম্যানুয়ালি সম্পাদনা করার জন্য আমার অদ্ভুত শৌখিনতা ভাগ করে থাকেন, তাদের জন্য নিম্নলিখিতগুলি যুক্ত (বা সংশোধন) করাও কৌশলটি করতে পারে।

.git / কনফিগার (ব্যক্তিগত কনফিগারেশন)

[submodule "cookbooks/apt"]
    url = https://github.com/opscode-cookbooks/apt

.gitmodules (প্রতিশ্রুত ভাগীদারী কনফিগারেশন)

[submodule "cookbooks/apt"]
    path = cookbooks/apt
    url = https://github.com/opscode-cookbooks/apt

এটিও দেখুন -। গিটমডিউলগুলি এবং .git / কনফিগারেশনে সাবমডিউলগুলি নির্দিষ্ট করার মধ্যে পার্থক্য?


2

উপরের ক্রিসের উত্তরটি সুবিধার্থে ওয়ান-লাইনার বাশ স্ক্রিপ্ট, যেহেতু আমি আমার কোণে নিজেকে আঁকার পাশাপাশি আমার .ভিম স্ক্রিপ্টগুলিতে ভান্ডেল আপডেটগুলি ব্যবহার করেছি। DESTআপনার সাবমোডিউলগুলি সমন্বিত ডিরেক্টরিতে যাওয়ার পথ। করার পরে এটি করুনgit rm -r $DEST

DEST='path'; for file in `ls ${DEST}`; do git submodule add `grep url ${DEST}/${file}/.git/config|awk -F= '{print $2}'` ${DEST}/${file}; done

চিয়ার্স

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