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


98

আমার একটি বিদ্যমান গিট রেপো রয়েছে (একটি খালি) যা এ পর্যন্ত কেবল আমার দ্বারা লিখিতযোগ্য। আমি এটিকে কিছু ইউনিক্স ব্যবহারকারী গোষ্ঠী, ফুতে খুলতে চাই, যাতে ফু এর সমস্ত সদস্য এতে চাপ দিতে পারে। আমি সচেতন যে আমি সহজেই এর সাথে একটি নতুন গিট রেপো সেটআপ করতে পারি :

git init --bare --shared=group repodir
chgrp -R foo repodir

তবে বিদ্যমান রেপো ডিরের জন্য আমার সমতুল্য অপারেশন দরকার ।


4
আছে এই প্রশ্নের একটি চমৎকার উত্তর ServerFault (অন্য Stackoverflow সাইট) উপর করে।
জেরেইন

উত্তর:


116

repodirগ্রুপের ব্যবহারকারীদের জন্য কাজের একটি বিদ্যমান ভাণ্ডার তৈরি করার চেষ্টা করুন foo:

chgrp -R foo repodir                 # set the group
chmod -R g+rw repodir                # allow the group to read/write
chmod g+s `find repodir -type d`     # new files get group id of directory
git init --bare --shared=all repodir # sets some important variables in repodir/config ("core.sharedRepository=2" and "receive.denyNonFastforwards=true")

14
আমি যুক্ত করব যে আপনার সম্ভবত রেপোর কনফিগারেশনে কনফিগারেশন-শেয়ার্ডRepository = সত্য সেট করা উচিত। kernel.org/pub/software/scm/git/docs/git-config.html
Pistos

4
এটি আমি নিজে যা করছি তার খুব কাছাকাছি, তবে আমি কিছু বাহ্যিক নিশ্চিততা পেতে চাই। ধন্যবাদ :) আমিও আশা করছিলাম যে এখানে গিট ক্লোন থাকবে - ভাগ করা = গ্রুপ সাজানো জিনিস, তবে ক্লোন এর - ভাগ করা বিকল্পটি সম্পূর্ণ ভিন্ন কিছু করে।
পিস্তোস

4
git init --sharedকনফিগার মানটি সেট করতে আপনি বিদ্যমান রেপোতে কমান্ডটি ব্যবহার করতে পারেন । সঠিকভাবে chmodফাইলগুলির অনুমতি পাওয়ার জন্য আপনাকে কমান্ডটি করতে হবে।
স্পেন্সার

4
এটি নিশ্চিত করতে আপনি যদি কোনও জগাখিচুড়ে রয়েছেন তবে তাও সহায়তা করে কারণ কোনও ব্যক্তি মালিক git pullহিসাবে www-dataযা আছে বা তার ফলস্বরূপ যা কিছু করার পরিবর্তে মূল হিসাবে একটি ইত্যাদি করেছেন error: insufficient permission for adding an object to repository database .git/objects। আমি ভেবেছিলাম findএবং -type d/ এবং ব্যবহার করে ভুল হওয়া সমস্ত ফাইল / ডিরেক্টরিগুলির মালিকানা স্থির করেছি type -fতবে কেবল এই পদ্ধতিটি ত্রুটি থেকে মুক্তি পেয়েছে (সম্ভবত। কারণ কিছু উপ-ডিরেক্টরিতে কোনও ফাইল গ্রুপ লেখার যোগ্য ছিল না?)
উইলিয়াম তারেল

4
ব্যবহারকারীর উমাস্কটি এখনও সদ্য নির্মিত ফাইলগুলিতে প্রয়োগ করার মতো বলে মনে হচ্ছে। আপনি কি আশা করেন? আমি মনে করি ডকুমেন্টেশন এর core.sharedRepositoryউল্লেখ করবে - এটি ব্যবহারকারীরা তাদের সমস্ত ফাইল গ্রুপকে লেখার যোগ্য না করে অকেজো বলে মনে হয়।
স্যাম ব্রাইটম্যান

47

রেপো ডিয়ারে নিম্নলিখিত কমান্ডগুলি কার্যকর করুন:

git config core.sharedRepository group
chgrp -R foo repodir
chmod -R g+w repodir

সম্পাদনা করুন: ঘন ঘন বিভ্রান্তি দূর করার জন্য, groupএকটি আসল কীওয়ার্ড, আপনার গ্রুপের নাম দিয়ে এটি প্রতিস্থাপন করার কথা নয়।


26
groupগোষ্ঠীর নাম কোথায় নেই :)
পিয়েরে লেস্পিনে

7
অবজেক্ট এবং প্যাক ফাইলগুলি অপরিবর্তনীয় হতে হবে; তাদের 444 / r - r - r-- এর অনুমতি থাকা উচিত।
সিবি বেইলি

4
চেষ্টা করার পরে git config core.sharedRepository devতারপর টাইপ git configআমি পেতে fatal: bad config value for 'core.sharedrepository' in .git/configমধ্যে git version 1.7.0.4(এবং সম্ভবত সংস্করণ পরে)
Kzqai

4
git config core.sharedRepository group groupগ্রুপের নাম নয়, আসল মান!
কিক্সরজ

যদি আপনি "গ্রুপ" এর পরিবর্তে আপনার গ্রুপের নামটি ব্যবহার করার ভুল করে থাকেন তবে কেবলমাত্র পাঠ্য সম্পাদকে .git / কনফিগারেশনটি খুলুন এবং "গ্রুপ" বলার জন্য কোর.শ্রেডরপোজিটরি লাইনটি সম্পাদনা করুন।
টম

46

মার্জ @David Underhill এবং @ কিক্সরজ উত্তরগুলি আমি নিজের (সমাধানের) সমাধানটি তৈরি করেছি।

এটি খালি রেপোসের জন্য এবং নন-বেয়ার रिपোর জন্য। তাদের মধ্যে কেবল সামান্য পার্থক্য রয়েছে, তবে এইভাবে আরও স্পষ্ট।

বারে রিপোজিটরি

cd <repo.git>/                            # Enter inside the git repo
git config core.sharedRepository group    # Update the git's config
chgrp -R <group-name> .                   # Change files and directories' group
chmod -R g+w .                            # Change permissions
chmod g-w objects/pack/*                  # Git pack files should be immutable
find -type d -exec chmod g+s {} +         # New files get directory's group id

কোথায়:

  • <repo.git> সার্ভারে সাধারণত উদ্যান সংগ্রহস্থল ডিরেক্টরি (উদাহরণস্বরূপ) my_project.git/ )।
  • <group-name>গিট ব্যবহারকারীদের (যেমন ব্যবহারকারীদের ) গোষ্ঠীর নাম ।

নন-বারে রিপোজিটরি

cd <project_dir>/                         # Enter inside the project directory
git config core.sharedRepository group    # Update the git's config
chgrp -R <group-name> .                   # Change files and directories' group
chmod -R g+w .                            # Change permissions
chmod g-w .git/objects/pack/*             # Git pack files should be immutable
find -type d -exec chmod g+s {} +         # New files get directory's group id

কোথায়:

  • <project_dir> প্রকল্প ডিরেক্টরি রয়েছে .gitফোল্ডার ।
  • <group-name>গিট ব্যবহারকারীদের (যেমন ব্যবহারকারীদের ) গোষ্ঠীর নাম ।

যেমন চার্লস বলেছিলেন, এগুলিও করুন: chmod g-w objects/pack/*(যদি নন-বেয়ার রিপোজিটরি, .git/
প্রিপেন্ড করা হয়

এখানে আমরা কীভাবে গ্রুপের নামটি খুঁজে পাব বা গ্রুপের নামটি কীভাবে তৈরি করব?
সুজিথরাও

'chmod g + s find . -type d' ত্রুটি উত্থাপন করেunable to execute /bin/chmod: Argument list too long
ডাঃ এক্স

@ Dr.X হিসাবে উল্লেখ করা হয়েছে, chmod g+s `find . -type d`স্কেল করে না। ব্যবহার করুনfind -type d -exec chmod g+s {} +
হেজেলো

আমি মনে করি সমস্ত আলগা বস্তুগুলি কেবল পূর্ব-ভাগ করা অবস্থার ভিত্তিতে পঠনযোগ্য হওয়া উচিত। এরকম কিছু হতে পারে chmod g-w objects/*/*। আমি তথ্য সাবডিরেক্টরি সম্পর্কে নিশ্চিত নই যদিও এটি এই রেপোর জন্য খালি রয়েছে।
এরিক

3

এটি সম্ভবত প্রয়োজনীয় নয়, তবে এটি নির্দিষ্ট করে তোলা মূল্যবান যা অস্বীকারযোগ্যনফস্টফরোয়ার্ড বিকল্পটিও git init --bare --sharedসেট করে ।

git config receive.denyNonFastForwards true

এই বিকল্পটির অর্থ নিম্নরূপ:

receive.denyNonFastForwards

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

( http://git-scm.com/book/en/v2/ কাস্টমাইজিং- গিট- গিট- কনফিগারেশন থেকে )


1

একটি দলকে পড়ার / লেখার অনুমতি দেওয়ার উপরের উত্তরের পাশাপাশি আপনাকে দলে ব্যবহারকারীকে যুক্ত করতে হবে ("foo" বলুন)।

sudo usermod -a -G [groupname] [username]

দ্রষ্টব্য: এটি উপস্থিত না থাকলে আপনাকে প্রথমে ব্যবহারকারী তৈরি করতে হবে

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