เป็นความคิดที่ดีหรือไม่ที่จะใช้ git สำหรับการควบคุมเวอร์ชันของไฟล์การกำหนดค่า?


18

ฉันใช้ Gentoo Linux และมีการกำหนดค่าที่ค่อนข้างซับซ้อน คำถามของฉันควรใช้ git สำหรับการควบคุมเวอร์ชันไฟล์ปรับแต่งของฉันหรือไม่?

ฉันมี repos คอมไพล์ในบ้านของฉันเดาของฉันถ้าฉันใส่ / home / ** ของฉัน. gignignore พวกเขาจะไม่ทำให้เกิดปัญหา

ปรับปรุงข้อมูลชี้แจง:

มันเป็นวิธีที่ฉลาดหรือไม่ที่จะใช้ git เพื่อควบคุมไฟล์การกำหนดค่าระดับระบบในไดเรกทอรีราก "/"


@AnthonyGeoghegan ฉันต้องการติดตามไดเรกทอรีราก "/" ของฉันสิ่งที่สามารถนำไปสู่ผลลัพธ์ที่น่าสนใจในอนาคตดังนั้นเธรดที่เชื่อมโยงจะตอบคำถามของฉันเพียงบางส่วนเท่านั้น ส่วนอื่น ๆ : ควรใช้ git สำหรับรุ่นที่ควบคุมไฟล์ปรับแต่งของฉันยังไม่ได้รับคำตอบหรือไม่
atevm

1
@ AnthonyGeoghegan ขอบคุณ ฉันอัพเดทคำถาม
atevm

คำตอบ:


19

คำตอบสั้น ๆ กับคำถามของคุณคือใช่


ฉันจะไม่ลังเลที่จะแนะนำ Git (หรือซอฟต์แวร์ควบคุมเวอร์ชันอื่น) เพื่อติดตามไฟล์กำหนดค่า ตั้งแต่ทำเช่นนั้นฉันมีประสิทธิภาพมากขึ้น (โดยเฉพาะอย่างยิ่งสำหรับการกำหนดค่าการติดตั้งใหม่) และมีความมั่นใจมากขึ้นในไฟล์กำหนดค่าของฉัน ด้วยการควบคุมเวอร์ชันฉันมีบันทึกว่ามีการเปลี่ยนแปลงอะไรบ้างและข้อความยืนยันส่งให้เหตุผลว่าทำไมการเปลี่ยนแปลงจึงเกิดขึ้น หากการเปลี่ยนแปลงมีผลข้างเคียงที่ไม่ได้ตั้งใจฉันสามารถตรวจสอบบันทึก / ประวัติเพื่อดูว่าการเปลี่ยนแปลงใดทำให้เกิดผลกระทบ

โดยส่วนตัวฉันจะระวังการติดตามไฟล์ทั้งหมดภายใต้/ไดเรกทอรีราก รายการเส้นทางที่จะเพิกเฉยอาจมีขนาดใหญ่และเทอะทะ ฉันชอบเก็บไฟล์แต่ละชุดไว้ในที่เก็บของตัวเอง

ฉันเองใช้ Git เพื่อติดตามของฉันส่วนบุคคลกำหนดค่า / เริ่มต้นขึ้นไฟล์เช่นการกำหนดค่าที่เป็นกลุ่มฟังก์ชั่นทุบตีนามแฝง ฯลฯ - คล้ายกับวิธีการที่ระบุไว้ในวิธีการติดตาม $ HOME กับคอมไพล์ ฉันเก็บไฟล์แต่ละชุดไว้ในที่เก็บของตัวเองและใช้ลิงก์สัญลักษณ์ไปที่โฮมไดเร็กตอรี่

สำหรับไฟล์การกำหนดค่าระบบฉันใช้ Git กับEtckeeperเพื่อติดตามไฟล์ใน/etcไดเรกทอรีของฉัน

ข้อเสีย

ปัญหาหนึ่งที่ต้องระวังคือถ้าไฟล์ที่มีการติดตามรวมถึงการเชื่อมโยงอย่างหนัก เมื่อ Git จะใช้ในการตรวจสอบไฟล์หรือมิฉะนั้น tree แก้ไขการทำงานก็ยกเลิกการลิงก์ไฟล์แล้วเปลี่ยนให้เป็น ดูGit, Dotfiles และ Hardlinksสำหรับคำอธิบายที่สมบูรณ์กว่า

Etckeeper

Etckeeper สามารถใช้เก็บประวัติการเปลี่ยนแปลงที่เกิดขึ้นกับ / etc จะติดตามข้อมูลเมตาของแฟ้มที่ระบบควบคุมการแก้ไขไม่ปกติสนับสนุน แต่นั่นเป็นสิ่งสำคัญสำหรับเช่นสิทธิ์ของ/etc/etc/shadow

มันเชื่อมโยงกับผู้จัดการแพคเกจเช่น apt และ yum และ (ในการกำหนดค่าเริ่มต้น) เรียกใช้ก่อนและหลังการติดตั้งเพื่อ/etcติดตามการเปลี่ยนแปลงทั้งหมด

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

  1. “ การบันทึกการเปลี่ยนแปลงแบบไม่มีข้อผูกมัดใน / etc ก่อนที่จะเรียกใช้ yum”
  2. “ คอมมิชชันการเปลี่ยนแปลงใน / etc หลังจากทำงานยำ "

ฉันใช้กับการแจกแจงแบบ Debian และ Red Hat และฉันรู้ว่ามันรองรับการจัดการแพ็คเกจ Arch ฉันไม่สามารถบอกว่าระบบอัตโนมัติมากก็จะเพิ่มไปยังระบบ Gentoo แต่แพคเกจใช้ได้สำหรับมัน

นอกจากนี้ยังรองรับการพุชไฟล์การกำหนดค่าไปยังพื้นที่เก็บข้อมูลระยะไกล (ซึ่งแน่นอนว่าควรเป็นแบบส่วนตัว)

องค์ประกอบ

หลังจากติดตั้งแพ็คเกจคุณอาจต้องกำหนดค่า ( /etc/etckeeper/etckeeper.conf) เช่นในระบบ Ubuntu ระบบควบคุมเวอร์ชันเริ่มต้นจะเปลี่ยนจาก Git เป็น Bazaar คุณอาจต้องการที่จะปิดการใช้งานอัตโนมัติกระทำในชีวิตประจำวัน

การเติมข้อความอัตโนมัติรายวัน

การเปลี่ยนแปลงสามารถกระทำได้โดยอัตโนมัติโดยงาน cron ในชีวิตประจำวัน สิ่งนี้อาจสร้างความรำคาญเนื่องจากที่เก็บสามารถรกด้วยข้อความการส่งข้อความอัตโนมัติหลายรายการ

ฉันไม่ใส่เครื่องหมายบรรทัดที่เหมาะสมใน/etc/etckeeper/etckeeper.conf:

sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf

ละเว้นไฟล์บางไฟล์

แก้ไข/etc/.gitignoreเพื่อระบุไฟล์ใด ๆ ที่ไม่ควรติดตาม

วิ่งครั้งแรก

หลังจากกำหนดค่าให้รันคำสั่งต่อไปนี้:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

หากไดเรกทอรีปัจจุบันของคุณคือetcคุณสามารถเรียกใช้gitคำสั่งปกติเช่น

sudo git status
sudo git log

1
ว้าวมันมีประโยชน์มากและมีรายละเอียด ... ขอบคุณ :)
atevm

เพียงเพื่ออัปเดตคำตอบที่ดีมาก : etckeeperในระหว่างการกระทำรายวันจะตรวจสอบก่อนว่า/etc"สกปรก" หรือไม่นั่นคือมันมีไฟล์ที่ไม่มีข้อผูกมัด ถ้าไม่มันจะไม่กระทำ ดังนั้นหากคุณบันทึกการกระทำที่เต็มไปกระทำทุกวันโอกาสที่มีไฟล์ที่มีการเปลี่ยนแปลงทุกวันว่าคุณไม่ได้เพิ่มให้กับ.*ignoreไฟล์ :-)
pepoluan

นอกจากนี้บน Ubuntu ก็มีแนวโน้มนี้น่าเบื่อของทันทีดำเนินการbzr init--__-- ... ผมขอแนะนำให้เสมอทำงานetckeeper uninit -fหลังจากการติดตั้ง
pepoluan

โปรดทราบว่า etckeeper นั้นไม่ได้โฮสต์บน github อีกต่อไป พวกเขาใช้ระบบของตัวเองในหน้าแรกของพวกเขาตอนนี้ อาจเป็นความเกลียดชัง M $ บางด้านผู้เขียน โดยส่วนตัวฉันพบว่าการตัดสินใจที่โชคร้ายเพราะตอนนี้คุณไม่สามารถรายงานปัญหาได้ง่ายและไม่สามารถดูได้ว่าโครงการดังกล่าวเป็นที่นิยมอย่างไร
Michael Härtl

ขอบคุณ @ MichaelHärtlฉันได้ลบลิงก์ที่ล้าสมัยไปยัง repo GitHub แล้ว
Anthony Geoghegan

3

ฉันใช้ git เพื่อติดตามพื้นที่เฉพาะของโฮมไดเร็กตอรี่ของฉัน โดยส่วนตัวฉันจะไม่เดินทางไปตามเส้นทางของการติดตามไดเรกทอรีราก แต่ฉันต้องบอกว่าฉันชื่นชมความใฝ่ฝันของคุณ :)

บางทีการสะสมประสบการณ์อาจทำให้คุณมีความคิดที่ดีขึ้นเกี่ยวกับสิ่งที่คุณอาจกำลังทำ:

ผลกระทบของการเริ่มต้นพื้นที่เก็บข้อมูล git ในไดเรกทอรีราก linux 3 :)

ขอโทษสำหรับ "คำตอบ" แทนที่จะทิ้งลิงค์ไว้ในความคิดเห็น อย่างไรก็ตามตัวแทนไม่เพียงพอ แต่ต้องการที่จะพูดสอด

แก้ไข

ว้าว! คำตอบที่ดีมากโดย @AnthonyGeoghegan ฉันเชื่อว่านี่ไม่ใช่การดิ้นรนมากเท่าที่ฉันเคยจินตนาการไว้


0

ฉันยังใช้gitในการจัดเก็บและการบำรุงรักษาของฉันแต่ในdotfiles git bare repositoryคู่มือรายละเอียดสามารถพบได้ที่นี่ ฉันใช้สองเก็บหนึ่งสำหรับผู้ใช้ของฉัน dotfiles ชื่อmyconfและหนึ่งสำหรับ dotfiles rootconfรากชื่อ

นอกจากนี้คุณสามารถใช้การกำหนดค่าทั้งสองบนเครื่องหลายเครื่องลินุกซ์ดิสทริบิวชันหรือเครื่องเสมือนที่แตกต่างกัน: เพียงแค่สร้างสาขาใหม่สำหรับการกำหนดค่าที่แตกต่างกัน จากนั้นคุณหลีกเลี่ยงการมั่วโค้ดในไฟล์เดียวกัน (เช่น.bash_alias): ไม่น่ารำคาญหากตรวจสอบเครื่องปัจจุบันอีกต่อไป ไม่มีการเชื่อมโยงที่จำเป็น!

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