একটি স্থানীয় থেকে একটি দূরবর্তী গিট সংগ্রহস্থল কিভাবে তৈরি করবেন?


243

আমার একটি স্থানীয় গিট সংগ্রহস্থল রয়েছে। আমি এটিকে একটি দূরবর্তী, এসএস-সক্ষম, সার্ভারে উপলব্ধ করতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


288

আমি মনে করি আপনি রিমোট সাইডে একটি খালি সংগ্রহস্থান তৈরি করেছেন, git init --bareআপনার স্থানীয় সংগ্রহস্থল ( git remote add origin URL) এর জন্য পুশ / পুল ট্র্যাকার হিসাবে দূরবর্তী দিকটি যুক্ত করুন এবং স্থানীয়ভাবে আপনি কেবল বলেছেন git push origin master। এখন অন্য কোনও সংগ্রহস্থল pullদূরবর্তী সংগ্রহস্থল থেকে আসতে পারে ।


@ নীপস: হ্যাঁ, ঠিক আছে, দুঃখিত। আপনি স্বতন্ত্র শাখা ঠেলাঠেলি করুন!
কেরেক এসবি

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

4
যদি git push origin master"ভান্ডার খুঁজে পাওয়া যায় না" ত্রুটিটি ব্যর্থ হয় তবে git update-server-infoদূরবর্তী দিকে চেষ্টা করুন, যেখানে আপনি করেছেনgit init --bare
হংকিলডং

7
@ কেরেকএসবি আমার স্থানীয়
লোকের

@HongKilDong আমি চেষ্টা git update-server-infoকিন্তু আমি ত্রুটি পাচ্ছি fatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
নায়েফ

81

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

$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/

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

এখন আপনার কাছে আপনার সংগ্রহশালার খালি অনুলিপি রয়েছে, আপনাকে যা করতে হবে তা এটি একটি সার্ভারে রেখে আপনার প্রোটোকলগুলি সেট আপ করতে হবে। ধরা যাক git.example.comযে আপনি একটি সার্ভার সেট আপ করেছেন যা আপনার কাছে এসএসএইচ অ্যাক্সেস রয়েছে এবং আপনি আপনার সমস্ত গিট সংগ্রহস্থল /opt/gitডিরেক্টরিতে সংরক্ষণ করতে চান । আপনি আপনার খালি ভাণ্ডার অনুলিপি করে আপনার নতুন সংগ্রহস্থল সেট আপ করতে পারেন:

$ scp -r my_project.git user@git.example.com:/opt/git

এই মুহুর্তে, অন্য ব্যবহারকারীদের যে একই সার্ভারে এসএসএইচ অ্যাক্সেস রয়েছে যা /opt/gitডিরেক্টরিতে পাঠযোগ্য অ্যাক্সেস রয়েছে তারা চালিয়ে আপনার সংগ্রহস্থলটিকে ক্লোন করতে পারেন

$ git clone user@git.example.com:/opt/git/my_project.git

যদি কোনও ব্যবহারকারী কোনও সার্ভারে এসএসএইচ করে এবং /opt/git/my_project.gitডিরেক্টরিতে লেখার অ্যাক্সেস পান তবে তাদের স্বয়ংক্রিয়ভাবে পুশ অ্যাক্সেসও থাকবে। --sharedবিকল্পটি দিয়ে git init কমান্ড চালালে গিট স্বয়ংক্রিয়ভাবে একটি সংগ্রহস্থলে গ্রুপ লিখনের অনুমতি যুক্ত করবে ।

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

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


6
scpসমাধান চেয়ে বাস্তবে আইএমও ভাল কাজ করে init --bare। এটি প্রথমে স্থানীয়ভাবে ক্লোন করা, তারপরে সার্ভারে অনুলিপি করা ... এমন এক কুৎসিত হ্যাকের মতো মনে হচ্ছে ... ইচ্ছে করে গিটকে একবারে এটি করার আদেশ দেওয়া হয়েছিল।
বাম দিকের বাইরে

1
--sharedআমার পক্ষে কাজ করেছে বলে এটি +1 করেছে । আমি অবাক হয়েছি আপনি যদি git init --sharedএকটি তৈরি না করেই ব্যবহার করেন তবে কি হবে --bare...
icedwater

1
স্থানীয়ভাবে একটি বেয়ার রিপোজিটরি তৈরি করুন এবং scpএটি যদি রিমোট সমর্থন না করে তবে এটি একটি রিমোটের পক্ষে আরও ভাল কাজ করে git init --bare(যেমনটি আমার কাছে 1.5.1.5, গিটের মতো ছিল)। আমি মনে করি রিমোটের কোনও গিট না থাকলেও এটি কাজ করা উচিত।
ইয়ারোস্লাভ নিকিতেনকো

1
তথ্যসূত্র: git-scm.com/book/en/v1/…
বার্বেট

1
একটি ছোট্ট দ্রষ্টব্য: সমাধানটির ধাপের স্কেপ ঠিক আছে তবে এটি কাজ করে যদি দূরবর্তী ব্যবহারকারীর নিয়মিত শেল থাকে, যদি ব্যবহারকারী গিট শেল ব্যবহার করে তবে এটি কাজ করবে না।
ব্যবহারকারী1708042

9

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

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

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

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

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


5

উপরে দুটি জনপ্রিয় সমাধানের মধ্যে একটি আকর্ষণীয় পার্থক্য রয়েছে:

  1. আপনি যদি এই জাতীয় খালি সংগ্রহ তৈরি করেন:

    সিডি / বাইরের_আপনি_আরপো
    mkdir my_remote.git
    সিডি my_remote.git
    git init --bare
    

এবং তারপর

cd  /your_path/original_repo
git remote add origin /outside_of_any_repo/my_remote.git
git push --set-upstream origin master

তারপরে গিট এই সম্পর্কের সাথে 'original_repo' তে কনফিগারেশন সেট আপ করে:

original_repo origin --> /outside_of_any_repo/my_remote.git/

উজানের দূরবর্তী হিসাবে পরবর্তী সঙ্গে। এবং আপস্ট্রিম রিমোটটির কনফিগারেশনে অন্য কোনও রিমোট নেই।

  1. তবে আপনি যদি অন্যভাবে এটি করেন তবে:

    (ডিরেক্টরি থেকে original_repo)
    সিডি ..
    গিট ক্লোন - কেবল আসল_রেপো / আউটসাইড_ও_নে_রেপো / মাই_রেমোট.git ote
    

তারপরে 'my_remote.git' এর কনফিগারেশনটির সাথে 'উত্স'টি রিমোট হিসাবে' মূল_রেপো 'তে ফিরে ইঙ্গিত করে, স্থানীয় ডিরেক্টরি পাথের সাথে একটি রিমোট.অরগিন.ইউআরল সমেত, এটি যথাযথ হতে পারে না যদি এটি সরিয়ে নেওয়া হয় একটি সার্ভারে।

যদিও সেই "রিমোট" রেফারেন্সটি যথাযথ না হলে পরে পরিত্রাণ পাওয়া সহজ, তবে 'মাই_রেমোট.git' কে আপ-স্ট্রিম রিমোট হিসাবে চিহ্নিত করতে (বা যেখানেই চলছে সেখানে) 'অরিজিনাল রেপো' সেট আপ করতে হবে থেকে ভাগ করা)। প্রযুক্তিগতভাবে, আপনি # 2 এর সাথে আরও কয়েকটি পদক্ষেপ নিয়ে একই ফলাফলটিতে আসতে পারেন। তবে # 1 স্থানীয় একটি থেকে উদ্ভূত "সেন্ট্রাল বেয়ার শেয়ার্ড রেপো" তৈরির আরও সরাসরি পদ্ধতির বলে মনে হচ্ছে, এতে সার্ভারে যাওয়ার পক্ষে উপযুক্ত, এতে কম পদক্ষেপ জড়িত। আমি মনে করি এটি আপনি যে দূরবর্তী রেপো খেলতে চান তার উপর নির্ভর করে। (এবং হ্যাঁ, এখানে ডকুমেন্টেশনের সাথে এটি বিরোধী ))

ক্যাভেট: আমি উপরের শিখলাম (আগস্টের শুরুতে এই লেখায়) সত্যিকারের রেপো দিয়ে আমার স্থানীয় সিস্টেমে একটি পরীক্ষা করে এবং তারপরে ফলাফলের মধ্যে ফাইল-ফাইল-ফাইল তুলনা করে। কিন্ত! আমি এখনও শিখছি, যাতে আরও সঠিক উপায় হতে পারে। তবে আমার পরীক্ষাগুলি আমাকে এই সিদ্ধান্তে পৌঁছাতে সহায়তা করেছে যে # 1 বর্তমানে আমার পছন্দসই পদ্ধতি।


4

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

আপনি নিম্নলিখিত কোড সহ একটি খালি গিট সংগ্রহস্থল করতে পারেন:

$ git clone --bare /path/to/project project.git

রিমোট গিট সংগ্রহস্থল রাখার জন্য একটি বিকল্প হ'ল এসএসএইচ প্রোটোকল:

এসএসএইচ-এর স্ব-হোস্টিংয়ের সময় গিটের জন্য একটি সাধারণ পরিবহন প্রোটোকল। এটি কারণ সার্ভারগুলিতে এসএসএইচ অ্যাক্সেস বেশিরভাগ জায়গায় ইতিমধ্যে সেট আপ হয়েছে - এবং যদি তা না হয় তবে এটি করা সহজ। এসএসএইচ একটি প্রমাণীকৃত নেটওয়ার্ক প্রোটোকলও এবং এটি সর্বব্যাপী হওয়ায় এটি সেটআপ করা এবং ব্যবহার করা সহজ generally

এসএসএইচ-তে একটি গিট সংগ্রহস্থল ক্লোন করতে, আপনি ssh://এই জাতীয় একটি URL নির্দিষ্ট করতে পারেন :

$ git clone ssh://[user@]server/project.git

অথবা আপনি এসএসএইচ প্রোটোকলের জন্য খাটো স্ক্র্যাপের মতো সিনট্যাক্স ব্যবহার করতে পারেন:

$ git clone [user@]server:project.git

উপরের দুটি ক্ষেত্রেই, আপনি যদি alচ্ছিক ব্যবহারকারীর নামটি নির্দিষ্ট না করেন তবে গিট ব্যবহারকারী হিসাবে ধরে আছেন যে আপনি বর্তমানে লগ ইন করেছেন।

অনুকূল

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

কনস

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

আরও তথ্যের জন্য, রেফারেন্সটি দেখুন: সার্ভারে গিট করুন - প্রোটোকলগুলি


3

আপনাকে একটি দূরবর্তী সার্ভারে একটি ডিরেক্টরি তৈরি করতে হবে। তারপরে এটিকে সংগ্রহস্থল হিসাবে সেট করতে "git init" কমান্ডটি ব্যবহার করুন। এটি আপনার প্রতিটি নতুন প্রকল্পের জন্য করা উচিত (প্রতিটি নতুন ফোল্ডার)

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

এখানে চেক করুন - https://github.com/skbobade/ocgi


-3

সাধারণত আপনি initকমান্ডটি ব্যবহার করে গিট রেপো সেট আপ করতে পারেন

git init

আপনার ক্ষেত্রে, ইতিমধ্যে একটি দূরবর্তী উপলব্ধ একটি রেপো আছে। আপনি কীভাবে আপনার রিমোট রেপোতে অ্যাক্সেস করেন (ইউআরএল এর ভিতরে ব্যবহারকারীর নাম বা একটি এসএস কী যা যাচাইকরণ পরিচালনা করে) কেবলমাত্র cloneকমান্ডটি ব্যবহার করে :

git clone git@[my.url.com]:[git-repo-name].git

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


1
এটি কতটা বিড়ম্বনাজনক .... আজকের দিনে কেউ এই উত্তরটিকে সরিয়ে ফেলল, এবং এখন আমি আমার ফাইলগুলিকে চাপ দিয়ে লড়াই করছি। মনে হচ্ছে এটিতে আবার গিটার জন্য আমার কিছু গিট ওয়ার্কআউট দরকার!
অ্যালেক্স সিও

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