จัดการ Dotfiles (Configuration) เหมือนจอมเวทย์ด้วย Git bare repository

วันอาทิตย์ที่ 29 พฤศจิกายน 2563
หมวดหมู่LinuxMacDotfiles

Wizard

ปกติเวลาใช้โปรแกรมอะไรโดยเฉพาะบน Linux หรือ Mac จะมีไฟล์ตั้งค่าเรียกว่า "Dot files" ที่ตั้งตามชื่อไฟล์ที่จะมี . นำหน้า (ใน Unix ถ้า . นำจะเป็นการซ่อนไฟล์) ซึ่งแทบจะเก็บการตั้งค่าทั้งระบบของคุณ (ขึ้นกับคุณตั้งแบบไหน)

แล้วก็จะมีพวกไฟล์สคริปต์ต่างๆที่คุณเขียนขึ้นมาใช้ตามประจำวัน แล้วไฟล์พวกนี้ถ้าเกิดมีการย้ายเครื่องหรือแชร์ข้ามเครื่องแบบเมนนวลจะยุ่งยากน่ารำคาญซักหน่อย เลยมีโปรแกรมตัวช่วยเช่น dotgit, yadm, อื่นๆ แต่สุดท้ายที่ลองมาใช้ Git แบบ bare ถือว่าดูดีที่สุดเนื่อจากยังไงก็ต้องมี Git ติดกับเครื่องอยู่แล้ว

วิธีทำ

ใช้ได้สำหรับ Linux หรืออาจจะ Mac เท่านั้น ขั้นแรกให้สร้าง Git bare repository ขึ้นมาก่อน

git init --bare $HOME/.dotfiles

แล้วก็สร้างคำสั่ง alias ขึ้นมา (แล้วก็เอาไปใส่ในไฟล์ alias ด้วย)

alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'

ตั้งไม่ให้แสดงไฟล์ที่ไม่อยู่ใน Track (สำคัญถ้าคุณไม่อยากโดนฟลัดด้วยชื่อไฟล์จำนวนมหาศาล)

config config --local status.showUntrackedFiles no

ตั้งค่า Origin เปลี่ยน URL เป็น URL git คุณ ถ้ายังไม่มีก็สร้างขึ้นมาก่อน

config remote add origin https://github.com/user/repo.git

เวลาจะดึง dotfiles บนเครื่องใหม่

Clone git เข้ามา

git clone --bare git@github.com:user/repo.git $HOME/.dotfiles

สร้างคำสั่ง alias (ใส่ในไฟล์ alias เหมือนกัน) แล้วตั้งค่าให้เสร็จ

alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
config checkout
config config --local status.showUntrackedFiles no

เวลาจะใช้เช่นเพิ่มหรืออัปเดต

ก็ใช้เหมือน git ครับแต่เปลี่ยนจากพิมพ์ git เป็น config

# เพิ่มหรืออัปเดตไฟล์
config add .vimrc
config commit -m "Add vimrc"
config push
# ดึงไฟล์จาก remote
config pull

เพิ่ม aliases

Alias ที่เราเพิ่มไปจะไม่อยู่ถาวร ดังนั้นเราต้องสร้างไฟล์ ~/.bash_aliases ขึ้นมาโดยให้ทำการแก้ไข

nano ~/.bash_aliases

เพิ่มตามนี้

alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
# อันนี้ไม่จำเป็น แต่ให้ไว้สำหรับคนขึ้เกียจพิม
alias cA='config add'
alias cAA='config add .'
alias cC='config commit -m'
alias cP='config push'
alias cPu='config pull'
alias cS='config status'

เสร็จแล้วให้ไป include ในไฟล์ shell startup ของตัวเองโดย ซึ่งถ้าหากใช้ fish ไฟล์จะชื่อว่า ~/.config/fish/config.fish ถ้าใช้ zsh ~/.zshrc ถ้าใช้ bash ~/.bashrc ให้เพิ่มโค้ดนี้ลงไปเพื่อ include ไฟล์ ~/.bash_aliases

. ~/.bash_aliases

ทั้งนี้ถ้าจะใส่ข้อมูล sensitive ก็ใช้ปลั๊กอิน git เข้ารหัสอย่าง git-crypt หรือตัวอื่นๆเพิ่มด้วยละกัน


Written by New. Featherless biped, born and live on Earth.
necz แอด pm.me


Facebook Thing