গীতে লেখক এবং প্রতিশ্রুতিবদ্ধ মধ্যে পার্থক্য?


235

আমি একটা কমিট করার মতো চেষ্টা করছি

git commit --author="John Doe <john@doe.com>" -m "<the usual commit message>"

যেখানে জন দো এমন কিছু ব্যবহারকারী যার নামে আমি প্রতিশ্রুতিবদ্ধ করতে চাই।

এটা ঠিক উপস্থিত হয় git log। যাইহোক, যখন আমি একটি না gitk, লেখকের নাম সঠিক, কিন্তু committer নাম আমার বিশ্বব্যাপী Git কনফিগ সেটিংস থেকে বাছাই করা হয় (এবং এইভাবে আমার নাম / ইমেল সেট করা হয়)।

প্রশ্নাবলি

  1. দু'জনের মধ্যে (পার্থক বনাম লেখক) পার্থক্য কী?

  2. আমি কি অন্য ব্যবহারকারীকেও প্রতিশ্রুতিবদ্ধ সেট করা উচিত?

  3. যদি হ্যাঁ, কিভাবে?


4
jasonnoble.org/2009/04/github-set-authorcommitter.html এখানে একটি সংক্ষিপ্ত বিবরণ দেওয়া আছে।
রেনি হাহলে


গিট কমিটর .gitconfig ফাইলে রাখা হয়। আপনি যদি --author .gitconfig নামের সাথে একই হন তবে আপনি কেবল প্রতিশ্রুতিবদ্ধ বার্তায় লেখক পাবেন। যদি তারা পৃথক হয় তবে আপনি উভয়ই পান।
pogUIst

উত্তর:


214

মূল পোস্টারটি জিজ্ঞাসা করেছে:

দু'জনের মধ্যে (পার্থক বনাম লেখক) পার্থক্য কী?

লেখক হলেন সেই ব্যক্তি যিনি মূলত কোডটি লিখেছিলেন। অন্যদিকে প্রতিশ্রুতিবদ্ধ ব্যক্তিটিকে মূল লেখকের পক্ষে কোডটি প্রতিশ্রুতিবদ্ধ ব্যক্তি বলে মনে করা হয়। এটি গিতে গুরুত্বপূর্ণ কারণ গিট আপনাকে ইতিহাস পুনরায় লেখার জন্য বা অন্য ব্যক্তির পক্ষে প্যাচ প্রয়োগ করতে দেয়। বিনামূল্যে অনলাইন প্রো গীত বই এর মতো এটিকে ব্যাখ্যা করেছেন:

আপনি ভাবছেন যে লেখক এবং প্রতিশ্রুতিবদ্ধ মধ্যে পার্থক্য কি । লেখক যেহেতু, যে ব্যক্তি মূলত প্যাচ লিখেছেন committer ব্যক্তি গত প্যাচ প্রয়োগ করা হয়। সুতরাং, যদি আপনি কোনও প্রকল্পে কোনও প্যাচ প্রেরণ করেন এবং মূল সদস্যগুলির মধ্যে একটি প্যাচ প্রয়োগ করে তবে আপনি উভয়ই creditণ পাবেন - আপনি লেখক হিসাবে এবং মূল সদস্য হিসাবে প্রতিশ্রুতিবদ্ধ হিসাবে।

মূল পোস্টারটি জিজ্ঞাসা করেছে:

আমি কি অন্য ব্যবহারকারীকেও প্রতিশ্রুতিবদ্ধ সেট করা উচিত?

না, আপনি যদি সত্যবাদী হতে চান তবে আপনার লেখককে প্রতিশ্রুতি স্থাপন করা উচিত নয়, যদি না লেখক এবং প্রতিশ্রুতিবদ্ধ ব্যক্তি একই ব্যক্তি না হয়।


1
আমি এখনও এই সম্পর্কে বিভ্রান্ত। আমার এটি ঘটেছে, এবং আমার ক্ষেত্রে, যতদূর আমি সচেতন, কোনও প্যাচ বা ইতিহাস পুনরায় লেখার ঘটনা আর কখনও ঘটেনি (যদি না কিছু গিট কমান্ড প্যাচগুলি তৈরি করে এবং প্রয়োগ করে, "ফণীর নীচে") a সত্যিই কি এ জাতীয় কিছু হওয়ার জন্য কেবল 2 উপায়?
কাপলিনেটর

2
এছাড়াও, লেখককে "ব্যক্তি যিনি কোড লিখেছেন" ডেকে আনা অর্থপূর্ণ নয়। গিট কীভাবে জানতে পারে কে এটি লিখেছেন? আপনি যখন সেট করেন git config userএবং তারপরে git addএবং git commitতারপরে, গিটটি জানতে পারে কে কাকে যুক্ত করেছে এবং কারা প্রতিশ্রুতিবদ্ধ, তবে এখনও এটি জানতে পারে না কে এটি লিখেছিল।
কাপলিনেটর

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

92

মেইলিং তালিকা + git format-patch+ git applyলেখক তৈরি করতে পারে! = প্রতিশ্রুতিবদ্ধ

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

বিভিন্ন লেখক এবং প্রতিশ্রুতিবদ্ধদের সাথে একক নতুন প্রতিশ্রুতি উত্পন্ন:

  • লেখক প্যাচ লিখেছেন
  • প্রতিশ্রুতিবদ্ধ হ'ল কে প্রকল্পের রক্ষণাবেক্ষণকারী এবং কে প্যাচটি মার্জ করেছে

উদাহরণস্বরূপ দেখুন এলোমেলোভাবে নির্বাচিত প্যাচ এবং সম্পর্কিত কমিট:

গিটহাব এবং গিটল্যাবের মতো গিট ওয়েব ইন্টারফেসগুলি লেখক তৈরি করতে পারে বা নাও পারে! = প্রতিশ্রুতিবদ্ধ

যেহেতু গিট (হাব | ল্যাব) উভয়টি একই মেশিনে প্রবাহ এবং কাঁটাচামান সংগ্রহস্থল উভয়কে ধারণ করে, তাই তারা স্থানীয়ভাবে আপনি যে কোনও কাজ করতে পারবেন, যার মধ্যে দুটিও অন্তর্ভুক্ত:

  • মার্জ কমিট তৈরি করুন।

    লেখক উত্পন্ন করে না! = প্রতিশ্রুতিবদ্ধ।

    এসএএএ বা নতুন প্রতিশ্রুতি অক্ষত রাখে এবং একটি নতুন প্রতিশ্রুতি তৈরি করে:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    .তিহাসিকভাবে, এটি গিটহাবের প্রথম উপলব্ধ পদ্ধতি ছিল।

    স্থানীয়ভাবে, এটি দিয়ে সম্পন্ন করা হয় git merge --no-ff

    এটি প্রতি পুল অনুরোধে দুটি কমিট তৈরি করে এবং গিট ইতিহাসে একটি কাঁটাচামচ রাখে।

  • উপরে রিবেস master

    গিটহাব প্রতিশ্রুতিবদ্ধ == যে কেউ মার্জ বোতাম টিপেছে সেগুলি সেট করার কমিটগুলিও হ্যাক করে। এটি বাধ্যতামূলক নয় এবং এমনকি স্থানীয়ভাবে git rebaseএটি ডিফল্টরূপেও করা হয় না তবে এটি প্রকল্প রক্ষণকারীকে জবাবদিহিতা দেয়।

    গিট গাছটি এখন দেখতে দেখতে:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    যা হ'ল git applyইমেল প্যাচগুলির মতো।

বর্তমানে গিটহাবে:

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

https://help.github.com/articles/about-merge-methods-on-github/

কীভাবে একটি নতুন প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ সেট?

প্রতিবেদককে ওভাররাইড করার জন্য পরিবেশের পরিবর্তনশীলগুলি ব্যবহার করে আমি সবচেয়ে ভাল খুঁজে পেতে পারি:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

প্রদত্ত প্রতিশ্রুতিটির প্রতিশ্রুতিবদ্ধ এবং প্রতিশ্রুতিবদ্ধ তারিখ কীভাবে পাবেন?

কেবলমাত্র লেখকের ডেটা ডিফল্ট অনুসারে প্রদর্শিত হয় git log

প্রতিশ্রুতিবদ্ধতার তারিখটি দেখতে আপনি যা করতে পারেন:

নতুন প্রতিশ্রুতিবদ্ধতার অঙ্গীকারের তারিখটি কীভাবে সেট করবেন?

git commit --date কেবল লেখকের তারিখ নির্ধারণ করে: প্রতিশ্রুতিবদ্ধতার তারিখের জন্য আমি পরিবেশের পরিবর্তনশীল সহ সেরাটি খুঁজে পেতে পারি:

GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'

আরও দেখুন: গীতে লেখক এবং প্রতিশ্রুতিবদ্ধদের মধ্যে পার্থক্য কী?

গিট কীভাবে লেখক বনাম প্রতিশ্রুতিবদ্ধ অভ্যন্তরীণভাবে সঞ্চয় করে?

দেখুন: গিট কমিট অবজেক্টের ফাইল ফর্ম্যাট কী?

মূলত, কমিট একটি পাঠ্য ফাইল এবং এতে দুটি লাইন পৃথক ক্ষেত্র রয়েছে:

author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}

এটি পরিষ্কার করে তোলে যে দু'জনই প্রতিশ্রুতিবদ্ধ অবজেক্টের দুটি সম্পূর্ণ স্বাধীন ডেটা এন্ট্রি।


1
নোট করুন যে এমনকি GIT_COMMITTER_*ওভাররাইড সহ, গিটটি এখনও যদি আপনি কোনও ডিফল্ট প্রতিশ্রুতি ব্যবহার করে সেট না করে থাকে তবে অঙ্গীকার সম্পাদন করতে অস্বীকার করবে git config
অ্যাডেলফাস

1
@ গড 2.5 এডেলফাস, আপনি উভয় সেট করলে এটি কাজ করেGIT_{COMMITTER,AUTHOR}_EMAIL
সিরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

3

@ সিরো সান্তিলি ব্যবহারের প্রস্তাব দিয়েছেন।改造 中心 六四 事件

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

নাম এবং ইমেলের পুনরাবৃত্তি এড়াতে, আপনি সেগুলি পুনরায় ব্যবহার করতে পারেন

GIT_COMMITTER_NAME='a'; GIT_COMMITTER_EMAIL='a'; git commit --author "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"

যা প্রথমে পৃথক কমান্ডে ভেরিয়েবল সেট করে, তারপরে তাদের git commitকলের জন্য ব্যবহার করে (ডাবল বন্ধনী নোট করুন)।

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