প্রশ্ন আমি কিভাবে মেশিনে একাধিক ব্যবহারকারীদের সাথে একটি জিট রিপোজিটরি ভাগ করব?


আমার একটি স্টেজিং সার্ভারে একটি গিট রিপোজিটরি রয়েছে যা একাধিক বিকাশকারীদের কাছে টেনে নিতে সক্ষম। git-init আমি যা খুঁজছেন তা খুব কাছাকাছি একটি পতাকা আছে মনে হচ্ছে: --shared, আমি একাধিক মানুষ যে রিপোজিটরি টান হিসাবে চাই, পাশাপাশি। দ্য git-cloneএর --shared পতাকা সম্পূর্ণ ভিন্ন কিছু করে।

একটি বিদ্যমান সংগ্রহস্থলের অনুমতি পরিবর্তন করার সবচেয়ে সহজ উপায় কি?


202
2018-06-17 01:04


উত্স


আমি "উইন্ডোজের জন্য গিথুব" ব্যবহার করছি এবং দুটি গিথাব অ্যাকাউন্টের মধ্যে স্যুইচ করবো: stackoverflow.com/questions/18565876/... - Alisa


উত্তর:


অনুমতি একটি কীটপতঙ্গ হয়।

মূলত, আপনাকে নিশ্চিত করতে হবে যে সমস্ত ডেভেলপারগুলি গিট রেপোতে সবকিছু লিখতে পারে।

বিকাশকারীর একটি গ্রুপ প্রদানের উচ্চতর পদ্ধতির জন্য নতুন ওয়েভ সমাধানটিতে যান।

স্ট্যান্ডার্ড সমাধান

আপনি যদি বিশেষভাবে তৈরি করা গোষ্ঠীতে সমস্ত ডেভেলপারকে রাখেন, তবে আপনি নীতিগতভাবে কেবল এটি করতে পারেন:

chgrp -R <whatever group> gitrepo
chmod -R g+swX gitrepo

তারপর পরিবর্তন করুন umask ব্যবহারকারীদের জন্য 002, যাতে নতুন ফাইলগুলি গ্রুপ-লেখার অনুমতিগুলি দিয়ে তৈরি হয়।

এই সমস্যা লিজিয়ন হয়; যদি আপনি একটি distro উপর যে অনুমান একটি umask এর 022 (যেমন একটি সাধারণ থাকার users গোষ্ঠী যা ডিফল্টরূপে অন্তর্ভুক্ত করে), এটি অন্যত্র সুরক্ষা সমস্যাগুলি খুলতে পারে। এবং যত তাড়াতাড়ি বা পরে, কিছু আপনার সাবধানে পরিকল্পিত অনুমতি প্রকল্প স্ক্রু আপ যাচ্ছে, আপনি পেতে না হওয়া পর্যন্ত repo আউট কর্ম নির্বাণ root অ্যাক্সেস এবং এটি ঠিক করুন (অর্থাত্, উপরের কমান্ড পুনরায় চালানো)।

নিউ ওয়েভ সমাধান

একটি উন্নততর সমাধান-যদিও কম ভাল বোঝা যায়, এবং যার জন্য আরও বেশি OS / টুল সাপোর্ট দরকার- এটি POSIX বর্ধিত বৈশিষ্ট্যগুলি ব্যবহার করতে হয়। আমি মোটামুটি সম্প্রতি এই এলাকায় আসি, তাই আমার জ্ঞান এখানে যতটা গরম হোক না কেন। কিন্তু মূলত, একটি বর্ধিত এসিএলটি কেবলমাত্র 3 ডিফল্ট স্লট (ব্যবহারকারী / গোষ্ঠী / অন্যান্য) এর চেয়ে বেশি অনুমতিগুলি নির্ধারণ করার ক্ষমতা।

তাই আবার, আপনার গ্রুপ তৈরি করুন, তারপর চালান:

setfacl -R -m g:<whatever group>:rwX gitrepo
find gitrepo -type d | xargs setfacl -R -m d:g:<whatever group>:rwX

এটি গোষ্ঠীর জন্য বর্ধিত এসিএল সেট করে যাতে গ্রুপের সদস্যরা ইতিমধ্যে যে কোনও ফাইল (প্রথম লাইন) পড়তে / লিখতে / অ্যাক্সেস করতে পারে; তারপরে, সকল বিদ্যমান ডিরেক্টরিগুলিকেও বলুন যে নতুন ফাইলগুলির একই ACL প্রয়োগ করা উচিত (দ্বিতীয় লাইন)।

আশা করি আপনার পথে যাবেন।


172
2018-06-17 06:00



git init নামের একটি পরামিতি --shared যা গ্রুপের কাজের জন্য core.sharedRepository পরিবর্তনশীল সেট আপ করে। আপনি একটি বিদ্যমান সংগ্রহস্থলের উপর পরিবর্তনশীল সেট করতে পারেন। এটি উমস্ককে ম্যানুয়ালি সেট করার প্রয়োজনীয়তা সরিয়ে দেয় কারণ গিট ফাইলটিকে ম্যানিপুলিউটিং করার আগে এটি একটি সরল মানতে সেট করবে। - ptman
POSIX প্রসারিত বৈশিষ্ট্য জন্য +1 - আমার খবর! - RobM
আমি যখন chmod -R g+swX, এটি গিটকে খুব অসুখী করে তোলে এবং এটি সিদ্ধান্ত নেয় যে এটি কোন গিট রিপোজিটরি ছিল না ("রেপো একটি গিট রেপোজিটরি হিসাবে উপস্থিত হয় না")। আমি জি-এস সব chmod ছিল নথি পত্র। শুধু setgid বিট সেট করতে ডিরেক্টরিচেষ্টা করুন find /path/to/repo -type d -print0 | xargs -0 chmod g+s। এখনও কি chgrp -R thegroup /path/to/repo। - rescdsk
chmod -R g+swX gitrepo ফাইলগুলিতে সেটগুইড বিট প্রয়োগ করবে, যা একটি নিরাপত্তা ঝুঁকি। পরিবর্তে, আপনি ব্যবহার করতে পারেন find . -type d -exec chmod g+s {} + ডিরেক্টরি শুধুমাত্র এটি প্রয়োগ করতে। - Ian Dunn
ACL (setfacl) এর গোষ্ঠী আইডি উত্তরাধিকারী করার জন্য একটি ডিরেক্টরির মধ্যে তৈরি নতুন ফাইল এবং সাবডিরেক্টরিগুলিকে প্রয়োগ করার জন্য সেটগেডের জন্য সেটিং নেই। অতএব, আপনি chmod মাধ্যমে পৃথকভাবে setgid সেট করতে হবে। গিট এর - শৃঙ্খল বিকল্প (git-scm.com/docs/git-init), তবে, ব্যবহারকারীর umask সেটআপ এবং ওভাররাইড করতে আপনাকে অনুমতি দেয়। - Chase T.


যদি আপনি রিপোজিটরি তৈরি করেন (অথবা একটি বিদ্যমান বেনের একটি নতুন বেন রিপো ক্লোন)

$ git init --shared=group 

অথবা

$ git init --shared=0NNN

জিটি আপনার ডিফল্ট umask প্রদান করে কি উপরে এবং অতিক্রম অনুমতি হ্যান্ডেল অনুমিত হয়। শেষ পর্যন্ত এই আমার গিট সংস্করণ (1.6.3) সংস্করণ। অবশ্যই এই আপনার ব্যবহারকারী একই গ্রুপে অনুমান।

তবে যদি আমার পড়া / লেখার বিভিন্ন ডিগ্রী সহ একাধিক গোষ্ঠীর ব্যবহারকারীদের পরিচালনার প্রয়োজন হয় তবে আমি জিটোসিসের সাথে যেতে চাই। আমি গিটোলাইটের কথাও শুনেছি (http://github.com/sitaramc/gitolite), শাখা স্তরের অনুমতি সরবরাহ করার জন্য suppossed যে একটি জিটসিস ফর্ক, আমি এটা প্রত্যেকটি ব্যবহার যদিও ব্যক্তিগতভাবে বলতে পারেন না।


113
2018-02-17 05:40



এই স্পষ্টভাবে সঠিক উত্তর। - ELLIOTTCABLE
আমি এই সমস্যা ছিল এবং এই পর্যন্ত সবচেয়ে ভাল উত্তর দ্বারা। শুধুমাত্র সমস্যা যে --shared যুক্তি একটি octal লাগে, হেক্সাডেসিমেল নয়। আমি গিট 1.7.8 এর উৎসে এটি নিশ্চিত করেছি এবং দ্বিতীয় উদাহরণটি হওয়া উচিত git init --shared=0NNN। - qpingu
কি NNN-প্রকাশ মাস্ক বা একটি গ্রুপ নম্বর বা অন্য কিছু? - Craig McQueen
BTW, উপরের "গোষ্ঠী" একটি শব্দ, আপনার গোষ্ঠীর নামের জন্য একটি স্থানধারক নয়। আপনি chgrp কমান্ড ব্যবহার করে গ্রুপটি বরাদ্দ করুন। এটি একটি নতুন repo জন্য git init --bare --shared=group myproj MyProj আপনার repo নাম, যেখানে অনুসরণ chgrp -R mygroup myproj যেখানে MyGroup আপনার গ্রুপ নাম। - labradort
আপনার ব্যবহারকারীরা যদি ডিফল্ট গোষ্ঠীটি কী হওয়া উচিত তার চেয়ে আলাদা হয় তবে এটি জিনিসগুলি স্ক্রু করতে পারে। এই সমস্যাটি সমাধানের জন্য, আপনার প্রতিটি ব্যবহারকারীকে সঠিক গ্রুপে রেপোর মালিকানাধীন প্রতিটি ফাইলটি চিপ করতে হবে। এটি তৈরি করা এবং ধাক্কা দেওয়ার আগে প্রত্যেককে কীভাবে নতুন গ্রুপ তৈরি / স্যুইচ করতে হবে তা সঠিকভাবে গোষ্ঠীকে / কীভাবে স্যুইচ করতে হবে তা আপনি পুনরাবৃত্তি করবেন না। - ragerdl


এই বলা হয়েছে না, তাই আমি তা দ্রুত যোগ করতে চান।

অনুমতি সমস্যাগুলি তাদের কুৎসিত মাথা কেটে না তা নিশ্চিত করার জন্য, আপনার git ভাগ করা সংগ্রহস্থলের কনফিগারেশন ফাইলটিতে নিম্নলিখিতটি নির্ধারণ করতে ভুলবেন না:

[core]
    sharedRepository = true

এটি আপনার সিস্টেমের "উমস্ক" সেটিংসকে সম্মানিত করবে তা নিশ্চিত করবে।


50
2018-03-09 05:52



গিট-কনফিগ অনুযায়ী (1) (kernel.org/pub/software/scm/git/docs/git-config.html) core.sharedRepository, ব্যবহারকারীর উমস্ককে সম্মান করার জন্য আপনাকে "উমস্ক" বা "মিথ্যা" এ সেট করতে হবে। - David Schmitt
এই এবং user35117 এর উত্তর সঠিক। মনে রাখবেন যে "true" "group" হিসাবে একই, এবং এটি কমান্ড দিয়ে সেট করা যেতে পারে git config core.sharedRepository true। - ColinM
রিমোটে push করা হয় যখন এটি এখনও একটি ফাইল মালিকানা পরিবর্তন? - Duc Tran
যদি আপনি এই সেট আপ করতে চান তবে ক্লোনিংয়ের পরিবর্তে, এর সমতুল্য git init --shared হয় git clone --config core.sharedRepository=true। ব্যবহার গিট অদ্ভুত --shared অনুরূপ কমান্ড যেমন বিভিন্ন অর্থ জন্য। - stevek_mcc


দ্য গিট ব্যবহারকারী ম্যানুয়াল কিভাবে বর্ণনা করে একটি সংগ্রহস্থলের শেয়ার করুন বিভিন্ন উপায়ে।

আরও জটিল, যদিও রিপোজিটরিগুলি ভাগ করার বৈশিষ্ট্য-পূর্ণ উপায়গুলি হল:

আমরা 6 ডেভেলপারদের একটি দলের জন্য গিটহাব ব্যবহার করি।


21
2018-06-17 07:35



আমি গিটোসিস পছন্দ করি। এটি পাবলিক কীগুলির উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করার জন্য একটি কার্যকর কার্যকর উপায়। - Mike Mazur
এই সমাধানগুলির মধ্যে কোনও সমাধান কীভাবে "আমি একাধিক মানুষকে সেই সংগ্রহস্থলের কাছে টেনে আনতে চাই" সমস্যার সমাধান করে? - womble♦
জিটোসিস একটি চেহারা আছে। যে এক আপনার সমস্যা সমাধান। - pilif
যখন আপনি রিপোজিটরিটি ভাগ করেন, তখন লোকেরা এটি থেকে টানতে সক্ষম হবে। তারা সম্ভবত এটি ক্লোন করতে হবে, অথবা একটি দূরবর্তী শাখা যোগ করতে হবে। আমি সংযুক্ত ডকুমেন্টেশন আপনার সমস্যা সমাধানের মাধ্যমে আপনি পরিষ্কারভাবে হাঁটতে হবে; আমি ডেভেলপারগুলিকে জিট সহ উত্স কোড সহযোগিতা করতে সহায়তা করার জন্য বর্ণিত সমস্ত পদ্ধতি ব্যবহার করেছি। আমার জ্ঞান সার্ভারফ্ট হ্যান্ডহোল্ডিং জন্য নয়। - jtimberman
আমি Gitosis ব্যবহার করে একমত হতে হবে। একাধিক এসএসএইচ কী দ্বারা প্রমাণিত একক একাউন্ট ব্যবহার করে এটি অনুমতিগুলির সমস্যাটি পায়। এটি git মাধ্যমে সম্পূর্ণরূপে নিজেই পরিচালিত হয়। - Jeremy Bouse


এছাড়াও তাকান gitolite আপনার গিট রিপোজিটরি হোস্টিং জন্য। Gitosis স্পষ্টভাবে আর উন্নত করা হচ্ছে না।


9
2018-01-19 08:55





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

ধরুন আপনার /myrepo.git এ একটি ভাগ করা সংগ্রহস্থল আছে। যে সংগ্রহস্থলের সব ফাইল বলতে অন্তর্গত mysharedgroup। যে সমস্ত সংগ্রহস্থল ধাক্কা সব ব্যবহারকারীদের অন্তর্গত করা উচিত mysharedgroup এছাড়াও। এখন নিম্নলিখিত ফাইল তৈরি করুন (পরিবর্তন mysharedgroup আপনার পছন্দসমূহের জন্য):

/myrepo.git/hooks/post-update

#!/bin/sh
chmod -R g+w . 2>/dev/null
chgrp -R mysharedgroup . 2>/dev/null

4
2017-09-27 14:35



ব্যবহারকারীদের বিভিন্ন ডিফল্ট গ্রুপ আছে যখন জন্য সঠিক উত্তর - Pat
একটি ডিরেক্টরিতে সেটগিড বিট সেট করা ব্যবহারকারীদের একই গ্রুপ মালিকানা অর্জনের জন্য ডিরেক্টরি তৈরি করবে (যদি ব্যবহারকারী সেই গোষ্ঠীর অন্তর্গত থাকে)। এমনকি এটি ব্যবহারকারীদের ডিফল্ট গোষ্ঠী নয়। তারপর এই হুক প্রয়োজন হয় না। এই @ গর্ভের উত্তরটি কি (এবং আমার মন্তব্য) কি। - rescdsk
আমার সেন্টস 7 মেশিনে, এই পৃষ্ঠায় তালিকাবদ্ধ প্রতিটি সমাধান চেষ্টা করার পরে, উপরের @ বিএমএমকেস সমাধানের একটি বৈকল্পিক একমাত্র বিকল্প যা আসলেই কাজ করেছে (উপরে পোস্টের পরিবর্তে পোস্ট-মার্জ এবং পোস্ট-চেকআউট হুক স্থাপন করে)। - Mike Godin


একটি নতুন রেপো সেট আপ করার বিষয়ে বিভিন্ন অন্যান্য উত্তর এবং মন্তব্যগুলি থেকে বিট এবং ভাল উপদেশের টুকরা সংগ্রহ করতে:

আপনি একটি ব্র্যান্ড নতুন repo সেট আপ করা হয় myrepo মধ্যে /srv/git দলের জন্য mygroup, এটাই তুমি চাও:

mkdir /srv/git/myrepo.git
chgrp mygroup /srv/git/myrepo.git
git init --bare --shared /srv/git/myrepo.git
  1. প্রথম লাইন repo dir সৃষ্টি করে
  2. দ্বিতীয় লাইন তার গ্রুপ সেট mygroup
  3. নিম্নোক্ত লাইন নিম্নলিখিত কনফিগারেশনের সাথে একটি বেয়ার রেপো আরম্ভ করে:
    1. core.bare = true: এটি একটি বেয়ার repo করা
    2. core.sharedrepository = 1 (একই রকম core.sharedrepository = group): repo ডিরেক্টরি এবং পরে এটি তৈরি সমস্ত ডিরেক্টরি গিট দ্বারা অনুমতি পরিচালিত হবে mygroup পঠন, লিখুন এবং অনুমতিগুলি চালান (sgid বিট সেট সহ - যাতে ব্যবহারকারীদের সাথে কাজ করার জন্য mygroup তাদের প্রাথমিক গ্রুপ নয়)
    3. receive.denyNonFastforwards = 1: অ দ্রুত ফাস্ট ফরওয়ার্ড repo করতে অস্বীকার করে

আপনি যদি ব্যবহারকারী, গোষ্ঠী, বা অন্যান্য ব্যবহারকারীর অনুমতিগুলি সূক্ষ্ম-টিউন করতে চান তবে ব্যবহার করুন --shared=0NNN, কোথায় NNN জন্য আদর্শ ব্যবহারকারী, গ্রুপ, এবং অন্যান্য বিট হয় নথি পত্র (execute এবং sgid বিট উপর ডিরেক্টরি গিট দ্বারা যথাযথভাবে পরিচালিত হবে)। উদাহরণস্বরূপ, এটি ব্যবহারকারীকে পঠন এবং লেখার অ্যাক্সেস এবং গোষ্ঠীতে কেবল-পঠনযোগ্য অ্যাক্সেসের অনুমতি দেয় (এবং অন্যের কোনও অ্যাক্সেস নেই):

git init --bare --shared=0640 /srv/git/myrepo.git

এটি ব্যবহারকারী এবং গোষ্ঠীর অ্যাক্সেস পড়তে এবং লিখতে অনুমতি দেয় (এবং অন্যের কোনও অ্যাক্সেস নেই):

git init --bare --shared=0660 /srv/git/myrepo.git

এটি ব্যবহারকারী এবং দলের অ্যাক্সেস পড়তে এবং লিখতে এবং অন্যের কেবলমাত্র পঠনযোগ্য অ্যাক্সেসের অনুমতি দেয়:

git init --bare --shared=0664 /srv/git/myrepo.git

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


3
2018-05-26 01:24



উচ্চ ভোট প্রতিক্রিয়া চেয়ে আরো সঠিক। - XO01