เลิกทำดัชนีการปรับปรุง git --skip-worktree


148

ไม่นานมานี้ฉันทำสิ่งนี้เพื่อข้ามการเปลี่ยนแปลงของไฟล์ที่ติดตามโดย git:

git update-index --skip-worktree <file>

ตอนนี้ฉันต้องการยอมรับการเปลี่ยนแปลงในไฟล์นั้นกับซอร์ส ฉันจะยกเลิกผลกระทบของได้skip-worktreeอย่างไร


11
ฉันสนใจวิธีรับรายการไฟล์ในสถานะ 'skip-worktree' ด้วยหรือไม่
troex

คำตอบ:



35

ตามที่http://www.kernel.org/pub/software/scm/git/docs/git-update-index.htmlให้ใช้

git ls-files -v

เพื่อดูไฟล์ "ถือว่าไม่เปลี่ยนแปลง" และ "skip-worktree" ที่ทำเครื่องหมายด้วยตัวอักษรพิเศษ ไฟล์ "ข้าม-worktree" Sถูกทำเครื่องหมายด้วย

แก้ไข : ดังที่@amacleodกล่าวไว้การสร้างนามแฝงเพื่อแสดงรายการไฟล์ที่ซ่อนอยู่ทั้งหมดเป็นเคล็ดลับที่ดีที่จะทำให้คุณไม่จำเป็นต้องจำมัน ฉันใช้alias hidden="git ls-files -v | grep '^S'"ใน. bash_profile ของฉัน มันใช้งานได้ดี!


9
เรียบร้อย ฉันสามารถใช้git ls-files -v | grep '^S'เพื่อแสดงรายการเฉพาะไฟล์ที่ฉัน "ซ่อน" ด้วย skip-worktree หวังว่าจะทำให้นามแฝง "ซ่อน" สำหรับคำสั่งนั้น แต่การเปลี่ยนเส้นทางไปป์ในนามแฝงดูเหมือนจะไม่ทำงาน
amacleod

5
@amacleod !การใช้งาน เช่นเดียวกับการ[alias] ignored = !git ls-files -v | grep "^S"ทดสอบนี้ทำงาน
Steven Lu

@amacleod อย่าคิดว่าคุณจะสามารถแนะนำคำสั่งทางเลือกสำหรับ Windows ได้ใช่ไหม
Steve Chambers

1
@SteveChambers grepไม่ทราบว่าติดตั้งแล้ว ฉันเดาว่าขึ้นอยู่กับเปลือกของคุณ grepฉันคิดว่าGit Bash มาพร้อมกับ
amacleod

1
ยอดเยี่ยมขอบคุณ @amacleod - ไม่ได้อยู่ในเส้นทางของฉัน สิ่งเดียวที่ฉันต้องเปลี่ยนเพื่อให้ทำงานบน Windows ได้คือรูปแบบเครื่องหมายคำพูด - 'ไม่ทำงาน แต่"ทำเช่นนั้นgit ls-files -v | grep "^S"
Steve Chambers

17

หากคุณต้องการยกเลิกไฟล์ทั้งหมดที่ใช้ข้าม worktree คุณสามารถใช้คำสั่งต่อไปนี้:

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  1. git ls-files -v จะพิมพ์ไฟล์ทั้งหมดด้วยสถานะ
  2. grep -i ^S จะกรองไฟล์และเลือกข้ามเฉพาะ worktree (S) หรือข้าม worktree และถือว่าไม่เปลี่ยนแปลง (s), -i หมายถึงไม่สนใจขนาดตัวพิมพ์
  3. cut -c 3- จะลบสถานะและออกจากเส้นทางเท่านั้นโดยตัดจากอักขระ 3-rd ไปยังจุดสิ้นสุด
  4. tr '\012' '\000' จะแทนที่อักขระจุดสิ้นสุดของบรรทัด (\ 012) เป็นศูนย์ (\ 000)
  5. xargs -0 git update-index --no-skip-worktreeจะผ่านเส้นทางทั้งหมดคั่นด้วยอักขระศูนย์ถึงgit update-index --no-skip-worktreeเพื่อยกเลิก

1
นี่คือคำตอบที่ดีที่สุด
Dev

คำตอบนี้เป็นทองคำบริสุทธิ์!
yossico

7

จากคำตอบ @ GuidC0DE นี่เป็นรุ่นสำหรับ Powershell (ฉันใช้posh-git )

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

และสำหรับการอ้างอิงยังคำสั่งตรงกันข้ามเพื่อซ่อนไฟล์:

git update-index --skip-worktree $(git ls-files --modified)

3

สำหรับผู้ใช้ Tortoise Git:

  1. คลิกขวาที่โฟลเดอร์หรือไฟล์ที่ต้องการจากนั้นเลือก TortoiseGit > Check for modifications
  2. Show ignore local changes flagged filesการตรวจสอบเท่านั้น คุณควรเห็นไฟล์ที่คุณเพิกเฉย (หรือไฟล์ทั้งหมดที่คุณเพิกเฉยหากคุณคลิกขวาที่โฟลเดอร์)
  3. คลิกขวาที่ไฟล์และเลือก Unflag as skip-worktree and assume-unchanged

3

สำหรับคุณทุกคนที่รักนามแฝง Bash นี่คือชุดของฉันที่จะปกครองพวกเขาทั้งหมด (ตาม C0DEF52)

alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'

0

คำตอบนี้มีวัตถุประสงค์เพื่อคนทางเทคนิคน้อยกว่าที่ใช้ Windows

หากคุณจำไม่ได้ / รู้ว่าไฟล์ใดที่คุณคลิก "skip-worktree" ให้ใช้:

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

ในการแก้ไขปัญหาของคุณ:

คุณสามารถไปที่ไฟล์ -> คลิกขวา -> เรียกคืนเป็นเวอร์ชันก่อนหน้า -> คลิกแท็บ "git" ที่ด้านบน -> ยกเลิกการเลือกช่องทำเครื่องหมาย "skip-worktree" -> คลิก "สมัคร" ที่ด้านล่าง

หากไฟล์มีจำนวนมากเกินกว่าจะแก้ไขด้วยมือคุณจะต้องอ้างอิงคำตอบอื่น ๆ

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