ฉันใช้แท็บสำหรับการเยื้องในโปรแกรมหลามของฉัน แต่ฉันต้องการที่จะทำงานร่วมกัน (ใช้ git) กับคนที่ใช้ช่องว่างแทน
มีวิธีที่ git แปลงระหว่างช่องว่างและแท็บโดยอัตโนมัติ (เช่น 4 ช่องว่าง = 1 แท็บ) ในการผลัก / ดึงข้อมูลหรือไม่? (คล้ายกับการแปลง CR / LF)
ฉันใช้แท็บสำหรับการเยื้องในโปรแกรมหลามของฉัน แต่ฉันต้องการที่จะทำงานร่วมกัน (ใช้ git) กับคนที่ใช้ช่องว่างแทน
มีวิธีที่ git แปลงระหว่างช่องว่างและแท็บโดยอัตโนมัติ (เช่น 4 ช่องว่าง = 1 แท็บ) ในการผลัก / ดึงข้อมูลหรือไม่? (คล้ายกับการแปลง CR / LF)
คำตอบ:
นี่คือทางออกที่สมบูรณ์:
ในที่เก็บของคุณเพิ่มไฟล์.git/info/attributes
ที่มี:
*.py filter=tabspace
Linux / Unix
ตอนนี้รันคำสั่ง:
git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'
OS X
ติดตั้ง coreutils เป็นครั้งแรกด้วยการชง:
brew install coreutils
ตอนนี้รันคำสั่ง:
git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'
ระบบทั้งหมด
ตอนนี้คุณสามารถตรวจสอบไฟล์ทั้งหมดของโครงการของคุณ คุณสามารถทำได้ด้วย:
git checkout HEAD -- **
และไฟล์หลามทั้งหมดจะมีแท็บแทนที่จะเว้นวรรค
แก้ไข : เปลี่ยนคำสั่งบังคับให้ชำระเงิน คุณควรทำงานของคุณก่อนแน่นอน
homebrew
แล้วเรียกใช้brew install coreutils
)
ใช่วิธีแก้ปัญหาหนึ่งที่อาจเกิดขึ้นได้คือการใช้ไดรเวอร์ตัวกรองแอตทริบิวต์ git (ดูเพิ่มเติมที่หนังสือ GitPro ) เพื่อกำหนดกลไกรอยเปื้อน / ทำความสะอาด
ทางนั้น:
คุณสามารถประกาศไดรเวอร์ตัวกรองนี้ (ชื่อที่นี่ ' tabspace
') ใน.git/info/attributes
(สำหรับตัวกรองที่ใช้กับไฟล์ทั้งหมดภายใน Git repo) โดยมีเนื้อหาดังต่อไปนี้:
*.py filter=tabspace
ตอนนี้รันคำสั่ง:
# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'
ดูคำตอบของOlivierสำหรับตัวอย่างการทำงานที่เป็นรูปธรรมของชุดคำสั่งเปื้อน / ทำความสะอาด
--global
ธงเนื่องจากนี่จะแปลว่าคุณส่งช่องว่างไปยังทุกโครงการการทำงานร่วมกัน ...
.gitattributes
เฉพาะโครงการที่มีสิทธิ แต่ใช่มันง่ายกว่าที่จะเข้าใจว่าการตั้งค่านั้นถูกเก็บไว้ใน repo หรือไม่ ฉันได้แก้ไขคำตอบแล้ว
~/.gitconfig
[filter "tabspace"]
smudge = unexpand --tabs=4 --first-only
clean = expand --tabs=4 --initial
[filter "tabspace2"]
smudge = unexpand --tabs=2 --first-only
clean = expand --tabs=2 --initial
จากนั้นฉันมีสองไฟล์:
attributes
*.js filter=tabspace
*.html filter=tabspace
*.css filter=tabspace
*.json filter=tabspace
และ attributes2
*.js filter=tabspace2
*.html filter=tabspace2
*.css filter=tabspace2
*.json filter=tabspace2
mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/
ด้วยวิธีนี้ในที่สุดเมื่อคุณผลักงานของคุณไปที่ GitHub มันจะไม่ดูโง่ในมุมมองโค้ด8 space tabs
ซึ่งเป็นพฤติกรรมเริ่มต้นในเบราว์เซอร์ทั้งหมด
mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch
ด้วยวิธีนี้คุณสามารถทำงานกับแท็บปกติใน2 space indented
โครงการได้
แน่นอนคุณสามารถเขียนโซลูชันที่คล้ายกันสำหรับการแปลง4 space to 2 space
ซึ่งเป็นกรณีถ้าคุณต้องการมีส่วนร่วมในโครงการที่เผยแพร่โดยฉันและคุณมักจะใช้ 2 ช่องว่างในขณะที่การพัฒนา
.gitattributes
ไฟล์ใน repo ของคุณได้
ถ้าคุณอยู่ในหน้าต่างแล้วคุณมีเพียงไม่กี่ขั้นตอนพิเศษที่จะได้รับ@Olivier Verdier ของการแก้ปัญหาในการทำงาน