เป็นไปได้หรือไม่ที่จะรวมไฟล์ไว้ใน. gitconfig ของคุณ


245

ฉันต้องการรวมไฟล์ไว้ใน. gitconfig ของฉันที่มีการตั้งค่า gitub - เป็นไปได้ไหม?

ฉันสามารถทำสิ่งนี้ได้ไหม:

[core]
    include = /path/to/file

3
"ฉันไม่ต้องการรวมรายละเอียด GitHub ไว้ในนั้นด้วยเหตุนี้ฉันจึงต้องการรวมรายละเอียดเหล่านั้นจากไฟล์ภายนอกอย่างใด": นั่นเป็นสิ่งที่ไฟล์กำหนดค่าทั่วโลกใช้ มีเหตุผลที่จะไม่ใช้มันในกรณีของคุณ?
VonC

11
ใช่เพราะฉันต้องการเผยแพร่. gitconfig ในที่เก็บ git และฉันไม่ต้องการให้ใครบางคนขโมยหนังสือรับรอง GitHub ของฉัน
David Reynolds

ฉันไม่ได้ติดตามคุณ: ไฟล์ gitconfig ปกติของคุณจะถูกเผยแพร่ไปยัง GitHub แต่ไม่มีการตั้งค่า GitHub ใด ๆ ทำไม? เพราะสิ่งเหล่านั้นจะอยู่ในไฟล์กำหนดค่าส่วนกลางของคุณ( ~/.gitconfig) นั่นคือไม่ถูกส่งไปยัง repo github ของคุณ เมื่อคุณพิมพ์ ' git config' สิ่งที่คุณเห็นคือการต่อกันของไฟล์กำหนดค่า 3 ไฟล์ (repo, global และระบบ) เฉพาะไฟล์ repo config เท่านั้นที่ถูกพุช อีกสองคนอยู่ในท้องถิ่น
VonC

90
ดูเหมือนว่าทุกคนพลาดจุดคำถามนี้ไปแล้ว เห็นได้ชัดว่า David ต้องการผลักดัน repo ของไฟล์ dot ทั้งหมดของเขา (bashrc, gemrc และอื่น ๆ ) รวมถึง. gitconfig ของเขาเพื่อให้เขาสามารถตั้งค่าทั้งหมดในเครื่องทั้งหมดของเขาได้ วิธีการที่จะผลักดันชิ้นส่วนของไฟล์ .gitconfig โดยรวมและละเว้นรายการส่วนตัวคือสิ่งที่เขา (และฉันสำหรับเรื่องที่) คือหลังจาก
บ่อ Jeanes

5
@bjeanes: แม่นยำ! ฉันยังไม่พบวิธีที่จะทำ
David Reynolds

คำตอบ:


302

Git (1.7.10+) รองรับไวยากรณ์นี้ใน.gitconfig:

[include]
    path = /path/to/file

ดูที่นี่สำหรับคำอธิบายโดยละเอียดเกี่ยวกับการเปลี่ยนแปลง git และกรณีขอบ

โดยวิธีการที่ subtleties สองคุ้มค่าชี้:

  1. สิ่งแวดล้อมตัวแปรการขยายตัวเช่น$HOMEไม่ได้รับการสนับสนุน (การขยายตัวของ~ปรากฏใน Git 1.7.10.2.)

  2. หากระบุพา ธ สัมพัทธ์มันจะสัมพันธ์กับไฟล์. gitconfig ที่มี[include]คำสั่ง นี้ทำงานได้อย่างถูกต้องแม้ในที่ถูกล่ามโซ่รวมถึง - เช่น~/.gitconfigสามารถมี:

    [include]
        path = subdir/gitconfig
    

    และsubdir/gitconfigสามารถมี:

    [include]
        path = nested_subdir/gitconfig
    

    ... ซึ่งจะทำให้subdir/nested_subdir/gitconfigโหลด

  3. หาก git ไม่สามารถหาไฟล์เป้าหมายมันจะละเว้นข้อผิดพลาดในใจ สิ่งนี้ดูเหมือนจะเกิดจากการออกแบบ


7
~ที่จริงคุณไม่จำเป็นต้อง นี้เป็นเพราะ .gitconfig ไฟล์ของคุณยังคงมีการอาศัยอยู่ใน~/.gitconfigเส้นทางญาติในการตั้งค่าจะบ่งบอก~...
robustus

2
~/ $HOMEการขยายตัวที่เป็นจริง ณ วันที่git describe --contains 4c0a89fc-> v1.7.10.2~12^2(เช่นv1.7.10.2หรือสูงกว่า) ที่โดดเด่นเป็นดูเหมือนว่า Debian และ Ubuntu 7 Quantal v1.7.10.4จะปล่อยด้วย
FauxFaux

1
สิ่งนี้ช่วยสนับสนุนหรือเปล่า? เช่น path = ~ / gitconfig.d / *?
Bret

1
@Bret no นี่ไม่รองรับ globs
Mike Morearty

8
หมายเหตุว่าการกำหนดค่ารวมถึงวิธีการนี้จะไม่ถูกแสดงเมื่อไฟล์ที่ระบุจะได้รับ (นั่นคือมี--global, --localหรือ--file) เว้นแต่บอกอย่างชัดเจนด้วย--includes(ชอบgit config --global --includes --list)
Franklin Yu

16

อัปเดต 2012:

ดูคำตอบของMike Morearty :

รวม

คุณสามารถรวมหนึ่งไฟล์ config จากอีกไฟล์หนึ่งโดยการตั้งค่าinclude.pathตัวแปรพิเศษให้เป็นชื่อของไฟล์ที่จะรวม
ไฟล์ที่รวมจะถูกขยายทันทีเช่นถ้าพบเนื้อหาในตำแหน่งของคำสั่ง include
หากค่าของinclude.pathตัวแปรเป็นพา ธ สัมพัทธ์พา ธ จะถูกพิจารณาว่าสัมพันธ์กับไฟล์คอนฟิกูเรชันที่พบคำสั่ง include
ค่าของinclude.pathอยู่ภายใต้การขยายตัวของตัวหนอน: ~/ถูกขยายเป็นค่าของ$HOMEและ~user/ไปยังไดเรกทอรีบ้านของผู้ใช้ที่ระบุ


ฉันไม่คิดเช่นนั้น.

ฉันอยากจะตั้งค่านั้นใน~/.gitconfigไฟล์

ไฟล์การกำหนดค่าเฉพาะผู้ใช้ เรียกอีกอย่างว่าไฟล์กำหนดค่า "ส่วนกลาง"

ด้วยวิธีนี้จะทำให้ไฟล์. gitconfig โครงการเฉพาะเสร็จสมบูรณ์โดยไม่ต้องเผยแพร่เมื่อส่งไปยัง GitHub ดูเพิ่มเติมที่คำตอบ SOนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์กำหนดค่าทั่วโลก
Git มีไฟล์กำหนดค่า3 ไฟล์


bjeanesเพิ่มในความคิดเห็น:

ดูเหมือนว่าทุกคนพลาดจุดคำถามนี้ไปแล้ว
เดวิดเห็นได้ชัดว่าต้องการที่จะผลักดัน repo ของไฟล์ที่จุดของเขาทั้งหมด ( bashrc, gemrcฯลฯ ) รวมทั้งตัวเขา.gitconfigเพื่อให้เขาสามารถมีการตั้งค่าทั้งหมดของเขาในเครื่องของเขาทั้งหมด
วิธีที่จะผลักดันบางส่วนของ.gitconfigไฟล์โดยรวมและไม่สนใจรายการส่วนตัวคือสิ่งที่เขา (และฉันสำหรับเรื่องนั้น) เป็นหลังจาก

วิธีที่เป็นไปได้คือการใช้ไดรเวอร์ตัวกรอง smudge / cleanเพื่อถอดรหัส / เข้ารหัสไฟล์หนึ่งไฟล์ที่มีข้อมูลสำคัญส่วนตัว (ดูที่เธรดนี้ ) เพื่อให้ไฟล์โลคัลเช่น ~ / .gitconfig สมบูรณ์ด้วยส่วนที่ถอดรหัสซึ่งเกี่ยวข้องกับสิ่งนั้น ไฟล์.

ด้วยวิธีนี้คุณสามารถมี repo Git พร้อมไฟล์ dot ทั้งหมดของคุณรวมทั้งไฟล์เดียวที่มีข้อมูลเข้ารหัสซึ่งหมายถึงการถอดรหัสและเพิ่มลงในไฟล์ dot ดังกล่าว

ข้อความแสดงแทน

ใช้.gitattributes(หรือ.git/info/a..):

myPrivateInfosFile filter=gpg diff=gpg

ในไฟล์ repo .config ของคุณ:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

( โซลูชันที่ใช้ GPGหมายความว่าคุณได้สื่อสารคีย์ส่วนตัว / สาธารณะโดยวิธีอื่นบนคอมพิวเตอร์ปลายทางที่คุณต้องการกู้คืนไฟล์ dot ทั้งหมดของคุณด้วยการโคลน repo พิเศษนี้)

ที่จริงแล้วในกรณีของคุณสคริปต์ smudge จะต้องเสร็จสมบูรณ์ตามที่ต้องหลังจากถอดรหัสไฟล์นั้นแล้วไปที่และเพิ่มส่วนที่เกี่ยวข้องไปยัง~/.gitconfigไฟล์ทั่วโลกของคุณ(เว้นแต่คุณจะเขียนทับไฟล์กำหนดค่าโกลบอลด้วยตำแหน่งอื่น ) หรือไฟล์จุดอื่น ๆ เรื่อง.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (ความไม่สะดวก gpg จะกล่าวถึงต่อไปในหัวข้อนี้ ) (ซึ่งแตกต่างจากการมี repo Git encrytped เต็มรูปแบบตามที่กล่าวไว้ที่นี่ )


5
ฉันต้องการเผยแพร่ไฟล์. gitconfig พื้นฐานของฉันในที่เก็บ git แต่ฉันไม่ต้องการรวมรายละเอียด github ไว้ในไฟล์ด้วยเหตุนี้ฉันจึงต้องการรวมไฟล์เหล่านั้นจากไฟล์ภายนอกด้วยวิธีใดก็ตาม
David Reynolds

10

คุณสามารถโหลดได้จากบรรทัดคำสั่ง:

$ git config --local include.path "/path/to/.gitconfig"

ใช้"$PWD"/.gitconfigแทนหากคุณต้องการโหลดไฟล์จากไดเรกทอรีปัจจุบัน

หลังจากรันคำสั่งด้านบนบรรทัดต่อไปนี้จะถูกเพิ่มเข้าไปใน.git/configไฟล์ของคุณ:

[include]
        path = /path/to/.gitconfig

2

ผมเชื่อว่าคุณสามารถทำได้โดยใช้ เครื่องมือที่เป็นศูนย์กลางของเดฟังคต์ นี่เป็น wrapper สำหรับคำสั่ง git ซึ่งช่วยให้คุณมีGITHUB_USERและGITHUB_TOKENตัวแปรสภาพแวดล้อม ซึ่งจะแทนที่การตั้งค่าใน.gitconfigไฟล์ภายในเครื่อง

แล้วจะทำให้มันไร้รอยต่อผู้ใช้ที่คุณชี้ไปที่สมนามalias git=hubของเขาในการตั้งค่า ZSH คุณควรจะสามารถส่งไฟล์ท้องถิ่นที่คุณตั้งค่าตัวแปรสภาพแวดล้อมของคุณและผลักดันพื้นที่เก็บข้อมูลของคุณสู่โลกสาธารณะด้วยข้อมูลส่วนตัวทั้งหมดของคุณ

** หมายเหตุสำหรับผู้ใช้ Homebrew ใน OSX brew install hubคุณสามารถติดตั้งเครื่องมือผ่าน

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