แทนที่ผู้ใช้ที่กำหนดค่าไว้สำหรับคอมมิตคอมไพล์เดียว


106

ฉันพยายามผูกมัดกับโปรเจ็กต์บนgithub.comจากแล็ปท็อปที่ทำงานของฉันซึ่งได้กำหนดค่าไว้สำหรับเซิร์ฟเวอร์คอมไพล์ของ บริษัท แล้ว มีวิธีในการระบุข้อมูลรับรองผู้เขียนที่แตกต่างกันหรือไม่ซึ่งเป็นไปได้โดยใช้ไฟล์การกำหนดค่าอื่นหรือสวิตช์บรรทัดคำสั่งอื่น ๆ

ฉันได้ลองใช้

--author="My Name <MyNameEmail@email.com>" 

และฉันได้รับข้อความ:

 Committer: unknown <WorkEmail@workemail.net>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

แต่ยังไม่อัปเดตชื่อผู้ใช้ของฉันสำหรับการเข้าร่วมโครงการ github.com มีอะไรอีกบ้างที่ฉันสามารถลองทำได้และเป็นไปได้ไหม


2
Git แตกต่างระหว่างผู้เขียนและcommitter ในการตั้ง committer -c user.name=Me user.email=me@example.comชั่วคราวหนึ่งคำสั่งการใช้งาน หากต้องการใช้การกำหนดค่าส่วนกลางที่กำหนดเองโปรดดูคำถามนี้หรือใช้นามแฝงเชลล์ที่มี-cตัวเลือก แต่สิ่งเหล่านี้อาจไม่ใช่สิ่งที่ถูกต้องในสถานการณ์นี้ - คุณต้องการกำหนดค่าต่อ repo
Robin Green

ด้วย Git 2.22 (Q2 2019) {author,committer}.{name,email}คุณจะมีการตั้งค่าเฉพาะ ดูคำตอบของฉันด้านล่าง
VonC

คำตอบ:


191

ประการแรกผู้เขียนไม่จำเป็นต้องเหมือนกับผู้สื่อสาร Git ติดตามทั้งสองอย่าง

หากต้องการตั้งชื่อที่จะใช้สำหรับที่เก็บนี้คุณสามารถทำได้:

git config user.name "Your Name"
git config user.email "Your email"

สังเกตว่าไม่มี--globalตัวเลือก สิ่งนี้จะตั้งค่าการกำหนดค่าในที่เก็บนี้เท่านั้น

หรือคุณสามารถทำได้เพียงคำสั่งเดียวโดยใช้-cตัวเลือก:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

แต่ฉันคิดว่าดีกว่าแค่ใช้ตัวเลือกการกำหนดค่าด้านบน


7
นี่คือสิ่งที่ฉันต้องการอย่างแท้จริงเนื่องจากฉันต้องยอมรับจากบัญชีที่ใช้ร่วมกัน (รูทบนเซิร์ฟเวอร์ devel) ไปยัง git repo ภายใต้ตัวฉันเองและฉันไม่ต้องการให้คนอื่นเสนอชื่อ / อีเมลของฉัน
andrej

60

ลองใส่คำสั่ง git ไว้ข้างหน้า:

git -c user.email=email@domain.fr -c user.name='Your Name'

สิ่งนี้ใช้ได้สำหรับ one-shot แต่คุณสามารถบันทึกในไฟล์. git / config ของ repo ในเครื่องที่คุณโคลนจาก git สามารถทำได้โดยการรันgit config (ไม่ --global หรือ --system เพื่อทำให้เป็น "local to the repo") หรือโดยการแก้ไข.git/config(เป็นไวยากรณ์เดียวกับ~/.gitconfig


1
ขอบคุณ! ฉันใช้เซิร์ฟเวอร์ร่วมกับหลายคนและไม่ต้องการตั้งค่าผู้ใช้เริ่มต้น ลงตัวนี้!
Unpythonic อย่างน่ากลัว

1
@horriblyUnpythonic ยินดีต้อนรับค่ะ :) นอกจากนี้คุณยังสามารถสร้างนามแฝงในของคุณ.bash_aliasesและ / หรือคุณยังสามารถตั้งค่า pre -mit hook เพื่อปฏิเสธการกระทำเมื่อไม่ได้กำหนดผู้ใช้
Asenar

28

นอกจากนี้คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมGIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEและGIT_AUTHOR_EMAILบนพื้นฐานต่อเปลือกหรือแม้กระทั่งต่อคำสั่ง


เยี่ยมมากเนื่องจากส่วนใหญ่จะใช้ในสถานการณ์คอมพิวเตอร์ที่ใช้ร่วมกันต่อเซสชันที่มีการล้างข้อมูลอัตโนมัตินั้นสมบูรณ์แบบ
kmac

1
ไม่ได้ผลสำหรับฉัน ผู้เขียนยังคงเหมือนเดิมหลังจากgit commit --amendนั้น เปลี่ยนเฉพาะคอมมิเตอร์
Ondra Žižka

ที่นี่ฉันก็เลยgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD

1
เนื่องจากgit commit --amendการออกแบบไม่ได้เปลี่ยนแปลงผู้เขียนตามที่ manpage กล่าว วิธีแก้ไข: git commit --amend --reset-author
kubanczyk

7

ฉันเชื่อว่าคุณสามารถวิ่งได้:

git config user.name "Your Name"
git config user.email you@example.com

สำหรับส่วนต่างๆของคอมไพล์ ลองเปิดโฟลเดอร์ที่กำลังทำงานสำหรับ repo ไปยังเซิร์ฟเวอร์ github

ตรวจสอบให้แน่ใจว่าคุณเห็นโฟลเดอร์. git ในโฟลเดอร์งานนั้น ตอนนี้เปิดโฟลเดอร์นั้นใน Terminal / Console / CommandPrompt แล้วลองเปลี่ยนชื่อผู้ใช้และอีเมลสำหรับโฟลเดอร์นั้นโดยเรียกใช้คำสั่งที่ฉันระบุไว้ข้างต้นเท่านั้น

การเปลี่ยนแปลงดังกล่าวทำให้คุณสามารถเข้าถึงเซิร์ฟเวอร์ GitHub ได้แล้ว

ดูที่นี่: https://help.github.com/articles/setting-your-username-in-git https://help.github.com/articles/setting-your-username-in-git

นอกจากนี้ฉันเชื่อว่ามีวิธีส่งไปยัง repo ระยะไกลโดยใช้ชื่อผู้ใช้และรหัสผ่าน github ของคุณในคำสั่ง แต่ฉันไม่ได้อ้างถึงเพราะมันไม่ได้ผลสำหรับฉัน


5

ติดตามคำตอบของ Jesse Glick ที่นี่ด้วยการใช้งานแบบขยายเนื่องจาก IMO คำแนะนำของเขาเป็นวิธีที่ดีที่สุดในการดำเนินการนี้

เพิ่มด้านล่างใน. bash_profile ของคุณ จะแจ้งให้ผู้ใช้ทราบเมื่อเรียกใช้คำสั่ง git ในเชลล์ที่ใช้งานอยู่เป็นครั้งแรก จากนั้นจะจดจำผู้ใช้สำหรับการเรียกใช้ครั้งต่อไปทั้งหมด

(เห็นได้ชัดว่าการอ้างอิงข้ามค่าผู้ใช้ที่ป้อนไปยังชื่อและที่อยู่อีเมลที่ต้องการสำหรับค่า git auther / name ต่างๆในบล็อกเคสและอัปเดตการกำหนดตามต้องการ)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}

2

นอกจากนี้คุณยังสามารถตั้งค่าตัวแปรสภาพแวดล้อมGIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEและGIT_AUTHOR_EMAILบนพื้นฐานต่อเปลือกหรือแม้กระทั่งต่อคำสั่ง

อันที่จริงแล้วตั้งแต่ Git 2.22 (Q2 2019) คุณมีตัวเลือกใหม่: {author,committer}.{name,email}มีการแนะนำตัวแปรการกำหนดค่าใหม่สี่ตัวแปรเพื่อแทนที่user.{name,email}ในกรณีที่เฉพาะเจาะจงมากขึ้น

ดูกระทำ 39ab4d0 (4 กุมภาพันธ์ 2019) โดยวิลเลียม Hubbs ( ``)
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 4e021dc , 07 มี.ค. 2019)

config: อนุญาตให้ระบุผู้เขียนและผู้คอมมิชชันแยกกัน

author.email, author.name, committer.emailและcommitter.nameการตั้งค่าที่คล้ายคลึงกับGIT_AUTHOR_*และGIT_COMMITTER_*ตัวแปรสภาพแวดล้อม แต่สำหรับgit configระบบ
ซึ่งทำให้สามารถตั้งค่าแยกกันสำหรับแต่ละที่เก็บ

Git รองรับการตั้งค่าข้อมูลการเขียนและการสื่อสารที่แตกต่างกันด้วยตัวแปรสภาพแวดล้อม อย่างไรก็ตามตัวแปรสภาพแวดล้อมถูกตั้งค่าไว้ในเชลล์ดังนั้นหากต้องการข้อมูลผู้แต่งและคอมมิตเตอร์ที่แตกต่างกันสำหรับที่เก็บที่แตกต่างกันจำเป็นต้องใช้เครื่องมือภายนอก

นี้เพิ่มการสนับสนุนการกำหนดค่าคอมไพล์สำหรับauthor.email, author.name, committer.emailและcommitter.name การตั้งค่าเพื่อให้ข้อมูลเหล่านี้สามารถตั้งค่าได้ต่อพื้นที่เก็บข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.