สถานะ Git แสดงไฟล์ที่มีการเปลี่ยนแปลงแม้ว่าเนื้อหาจะเหมือนกัน


195

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

ฉันตั้งค่าcore.fileModeเป็นเท็จและตั้งค่าcore.autocrlfเป็นเท็จโดยไม่สำเร็จ

เป็นมูลค่าการกล่าวขวัญว่า repo Git ที่ฉันได้รับมาจากใครบางคนที่ใช้ Windows ในขณะที่ฉันใช้ Linux

ฉันจะทำอย่างไรเพื่อยอมรับการเปลี่ยนแปลงที่เกิดขึ้นจริง ?

แก้ไข: เอาท์พุทของgit config -l:

user.name=Aron Rotteveel
user.email=<removed>
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=auto
color.ui=true
color.pager=true
color.branch.current=yellow reverse
color.branch.local=yellow
color.branch.remote=green
color.diff.meta=yellow bold
color.diff.frag=magenta bold
color.diff.old=red bold
color.diff.new=green bold
color.status.added=yellow
color.status.changed=green
color.status.untracked=cyan
core.pager=less -FRSX
core.whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
alias.co=checkout
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
core.autocrlf=false
remote.origin.url=<removed>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

อัปเดต: เพิ่มไฟล์ตัวอย่างบางไฟล์แบบสุ่ม ไฟล์เหล่านี้เป็นเพียงธรรมดาดังนั้นจึงเป็นเรื่องง่ายที่สุดที่จะรวม

ไฟล์ต้นฉบับจะอยู่ที่นี่: https://gist.github.com/c3c5302430935155ef3d Hexdumps ระบุอย่างชัดเจนว่าไฟล์ต่างกัน แต่ฉันไม่รู้ว่าอะไรเป็นสาเหตุของปัญหาและวิธีแก้ไข

รุ่น HEAD:

0000000: 4854 4d4c 2e53 6166 654f 626a 6563 740d  HTML.SafeObject.
0000010: 0a54 5950 453a 2062 6f6f 6c0d 0a56 4552  .TYPE: bool..VER
0000020: 5349 4f4e 3a20 332e 312e 310d 0a44 4546  SION: 3.1.1..DEF
0000030: 4155 4c54 3a20 6661 6c73 650d 0a2d 2d44  AULT: false..--D
0000040: 4553 4352 4950 5449 4f4e 2d2d 0d0a 3c70  ESCRIPTION--..<p
0000050: 3e0d 0a20 2020 2057 6865 7468 6572 206f  >..    Whether o
0000060: 7220 6e6f 7420 746f 2070 6572 6d69 7420  r not to permit 
0000070: 6f62 6a65 6374 2074 6167 7320 696e 2064  object tags in d
0000080: 6f63 756d 656e 7473 2c20 7769 7468 2061  ocuments, with a
0000090: 206e 756d 6265 7220 6f66 2065 7874 7261   number of extra
00000a0: 0d0a 2020 2020 7365 6375 7269 7479 2066  ..    security f
00000b0: 6561 7475 7265 7320 6164 6465 6420 746f  eatures added to
00000c0: 2070 7265 7665 6e74 2073 6372 6970 7420   prevent script 
00000d0: 6578 6563 7574 696f 6e2e 2054 6869 7320  execution. This 
00000e0: 6973 2073 696d 696c 6172 2074 6f0d 0a20  is similar to.. 
00000f0: 2020 2077 6861 7420 7765 6273 6974 6573     what websites
0000100: 206c 696b 6520 4d79 5370 6163 6520 646f   like MySpace do
0000110: 2074 6f20 6f62 6a65 6374 2074 6167 732e   to object tags.
0000120: 2020 596f 7520 7368 6f75 6c64 2061 6c73    You should als
0000130: 6f20 656e 6162 6c65 0d0a 2020 2020 254f  o enable..    %O
0000140: 7574 7075 742e 466c 6173 6843 6f6d 7061  utput.FlashCompa
0000150: 7420 696e 206f 7264 6572 2074 6f20 6765  t in order to ge
0000160: 6e65 7261 7465 2049 6e74 6572 6e65 7420  nerate Internet 
0000170: 4578 706c 6f72 6572 0d0a 2020 2020 636f  Explorer..    co
0000180: 6d70 6174 6962 696c 6974 7920 636f 6465  mpatibility code
0000190: 2066 6f72 2079 6f75 7220 6f62 6a65 6374   for your object
00001a0: 2074 6167 732e 0d0a 3c2f 703e 0d0a 2d2d   tags...</p>..--
00001b0: 2320 7669 6d3a 2065 7420 7377 3d34 2073  # vim: et sw=4 s
00001c0: 7473 3d34 0d0a                           ts=4..

รุ่นที่คัดลอก:

0000000: 4854 4d4c 2e53 6166 654f 626a 6563 740a  HTML.SafeObject.
0000010: 5459 5045 3a20 626f 6f6c 0a56 4552 5349  TYPE: bool.VERSI
0000020: 4f4e 3a20 332e 312e 310a 4445 4641 554c  ON: 3.1.1.DEFAUL
0000030: 543a 2066 616c 7365 0a2d 2d44 4553 4352  T: false.--DESCR
0000040: 4950 5449 4f4e 2d2d 0a3c 703e 0a20 2020  IPTION--.<p>.   
0000050: 2057 6865 7468 6572 206f 7220 6e6f 7420   Whether or not 
0000060: 746f 2070 6572 6d69 7420 6f62 6a65 6374  to permit object
0000070: 2074 6167 7320 696e 2064 6f63 756d 656e   tags in documen
0000080: 7473 2c20 7769 7468 2061 206e 756d 6265  ts, with a numbe
0000090: 7220 6f66 2065 7874 7261 0a20 2020 2073  r of extra.    s
00000a0: 6563 7572 6974 7920 6665 6174 7572 6573  ecurity features
00000b0: 2061 6464 6564 2074 6f20 7072 6576 656e   added to preven
00000c0: 7420 7363 7269 7074 2065 7865 6375 7469  t script executi
00000d0: 6f6e 2e20 5468 6973 2069 7320 7369 6d69  on. This is simi
00000e0: 6c61 7220 746f 0a20 2020 2077 6861 7420  lar to.    what 
00000f0: 7765 6273 6974 6573 206c 696b 6520 4d79  websites like My
0000100: 5370 6163 6520 646f 2074 6f20 6f62 6a65  Space do to obje
0000110: 6374 2074 6167 732e 2020 596f 7520 7368  ct tags.  You sh
0000120: 6f75 6c64 2061 6c73 6f20 656e 6162 6c65  ould also enable
0000130: 0a20 2020 2025 4f75 7470 7574 2e46 6c61  .    %Output.Fla
0000140: 7368 436f 6d70 6174 2069 6e20 6f72 6465  shCompat in orde
0000150: 7220 746f 2067 656e 6572 6174 6520 496e  r to generate In
0000160: 7465 726e 6574 2045 7870 6c6f 7265 720a  ternet Explorer.
0000170: 2020 2020 636f 6d70 6174 6962 696c 6974      compatibilit
0000180: 7920 636f 6465 2066 6f72 2079 6f75 7220  y code for your 
0000190: 6f62 6a65 6374 2074 6167 732e 0a3c 2f70  object tags..</p
00001a0: 3e0a 2d2d 2320 7669 6d3a 2065 7420 7377  >.--# vim: et sw
00001b0: 3d34 2073 7473 3d34 0a                   =4 sts=4.

1
หากคุณcore.filemodeไม่มีการตั้งค่าหรือตั้งค่าtrueเป็นเอาต์พุตต่างกันหรือไม่?
Mark Longair

ข้อมูลที่สำคัญอื่น ๆ ที่จะช่วยคือผลลัพธ์ของgit --version
Mark Longair

2
@AronRotteveel: นั่นเป็นเรื่องง่าย: ไฟล์แรกมี CRLF สายปลาย (Windows) ที่ LF สอง (Unix)
sehe

3
git 2.8 (มีนาคม 2016) เปิดตัวgit ls-files --eolเพื่อดูว่า eol เกี่ยวข้องหรือไม่ ดูคำตอบของฉันด้านล่าง
VonC

บุคคลบน windows สามารถเรียกใช้git config - global core.autocrlf จริงเพื่อแก้ไขปัญหานี้
Inyoka

คำตอบ:


62

ปรับปรุง: ตามความคิดเห็นในคำถามนี้ปัญหาได้รับการแก้ไข:

นั่นเป็นเรื่องง่าย: ไฟล์แรกมี CRLF line-end (windows), LF อันดับสอง (Unix) The fileutil (มีให้ใน git \ usr \ bin) จะแสดงให้คุณเห็นว่า ( file a bจะตอบกลับบางอย่างa: ASCII text, with CRLF line terminators b: ASCII text)

คำตอบเดิมด้านล่าง:


ความแตกต่างที่คุณแสดงไม่แสดงบรรทัดที่แตกต่างกัน คุณสามารถโพสต์. git / config (หรือดีกว่าgit config -l)

คุณอาจเปิดใช้งานช่องว่างบางช่อง

คุณควรพยายามปิดการใช้งานcore.whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol;

ด้วย

git show HEAD:myfile|md5sum
md5sum myfile

สามารถใช้เพื่อตรวจสอบว่าไฟล์นั้นแตกต่างกันจริงหรือไม่ การใช้ diff ภายนอกสามารถใช้งานได้เช่นกัน

git show HEAD:myfile > /tmp/myfile.HEAD

diff -u myfile /tmp/myfile.HEAD

# or if you prefer an interactive tool like e.g.:
vim -d myfile /tmp/myfile.HEAD

สิ่งที่แปลกก็คือ md5sums สำหรับไฟล์ทั้งสองนั้นแตกต่างกัน แต่ฉันไม่สามารถพบความแตกต่างของช่องว่างใด ๆ (ฉันคิดว่านี่เป็นกรณี แต่ฉันไม่เห็นเลย) ยินดีต้อนรับความช่วยเหลือใด ๆ
Aron Rotteveel

เพียงอัปโหลดตัวอย่างบางแห่ง (gist.github.com จะเหมาะสมกับสิ่งนี้) ฉันคิดว่ามันเป็นกับ newline ในบรรทัดสุดท้ายการเข้ารหัส byte-order-markหรือการเข้ารหัส UTF8 ที่ไม่ใช่บัญญัติทั่วไป คุณสามารถดูxxdหรือbdiffทำไบนารีที่ต่างกันได้เช่นกัน
sehe

ขอบคุณสำหรับทิป. xddใหม่สำหรับฉัน เครื่องมือที่ยอดเยี่ยม! ฉันอัปเดตโพสต์ด้วยตัวอย่าง
Aron Rotteveel

1
@AronRotteveel: นั่นเป็นเรื่องง่าย: ไฟล์แรกมี CRLF line-end (windows), LF อันดับสอง (Unix) แก้ไขการใช้งานfileจะแสดงให้คุณเห็นว่า ( file a bจะตอบกลับบางสิ่งบางอย่างa: ASCII text, with CRLF line terminators b: ASCII text)
sehe

ไม่ควรแสดงเป็น ^ M ใน VIM จริงหรือ (ฉันไม่เห็นมัน) เห็นได้ชัดว่าผมเชื่อว่าคุณ แต่ฉันสนใจจริงๆในวิธีการที่คุณสังเกตเห็นจริงนี้ :)
Aron Rotteveel

135

ฉันได้แก้ไขปัญหานี้โดยใช้ stpes ต่อไปนี้

1) ลบทุกไฟล์ออกจากดัชนีของ Git

git rm --cached -r .

2) เขียนดัชนี Git ใหม่เพื่อรับการขึ้นบรรทัดใหม่ทั้งหมด

git reset --hard

โปรดทราบว่าขั้นตอนที่ 2 อาจลบการเปลี่ยนแปลงในเครื่องของคุณ โซลูชันเป็นส่วนหนึ่งของขั้นตอนที่อธิบายไว้ในไซต์ git https://help.github.com/articles/dealing-with-line-endings/


ในกรณีของฉันฉันได้ทำบันทึกย่อไปยังไฟล์บางไฟล์แล้วคัดลอก repo โดยไม่ต้องมีโฟลเดอร์. git ไปยังคอมพิวเตอร์เครื่องใหม่ เมื่อฉันรู้ว่าฉันทำแพ็คเกจ. git ของฉันขาดหายไปมันก็สายเกินไปที่จะกลับไปค้นหา ดังนั้นฉัน: 1. ตรวจสอบสำเนาใหม่ของ repo ทั้งหมด 2. แทนที่ไฟล์วานิลลาด้วยไฟล์ที่มีการเปลี่ยนแปลงของฉัน 3. ดำเนินการขั้นตอนที่หนึ่งในโพสต์ของ OP: git rm --cached -r .4. ขั้นตอนนี้เป็นการเปลี่ยนแปลงของฉัน (และไฟล์อื่น ๆ ที่ถูกแทนที่ ) ดังนั้นฉันจึงไม่จัดระเบียบพวกเขา ณ จุดนี้ repo ของฉันกลับมาเป็นปกติ
ดี้

2
สุกใส ขอบคุณสำหรับสิ่งนี้.
rupi

6
ต้องระมัดระวังเพราะคุณจะสูญเสียการเปลี่ยนแปลงอื่น ๆ ถ้าคุณทำ
Mohy Eldeen

ฉันมีปัญหานี้หลังจากคัดลอกและวางโฟลเดอร์ repo ของฉันจาก Windows ไปยัง Ubuntu ไม่มีการเปลี่ยนแปลงในเครื่อง แต่ด้วยเหตุผลบางอย่าง git คิดว่าทุกไฟล์มีการเปลี่ยนแปลง วิธีนี้แก้ไขปัญหานี้ได้
Linek

88

คุณเปลี่ยนโหมดของไฟล์หรือไม่? ฉันทำมันในเครื่องของฉันและเครื่อง dev ในท้องถิ่นมี 777 ไฟล์ให้กับทุกไฟล์ในขณะที่ repo มี 755 ซึ่งแสดงให้เห็นว่าทุกไฟล์ถูกแก้ไข ฉันทำgit diffและมันแสดงให้เห็นว่าโหมดเก่าและโหมดใหม่นั้นแตกต่างกัน หากที่เป็นปัญหาแล้วคุณสามารถไม่สนใจพวกเขาโดย git config core.filemode false
ไชโย


2
ใช้ Windows 10 lxss (เช่น Ubuntu Bash) กับ repo ในระบบไฟล์ Windows ที่มีคอมไพล์ใน Linux ฉันคิดว่ามันเป็นปัญหาการสิ้นสุดบรรทัด ไม่เคยคิดมาก่อนเลยว่ามันจะเป็นวิธีที่แตกต่างกันเช่นกัน
Matt L

สิ่งนี้ใช้ได้สำหรับฉันเมื่อฉันเปลี่ยน O / S ในเครื่องจาก Ubuntu เป็น Windows ไชโย
Mark Bucknell

@ MattL และ itsandy ฉันมักจะพัฒนาในวันที่ 10 กับ Git Bash แต่วันนี้ฉันใช้ Mac และเห็นว่า git คิดว่า.gitignoreไฟล์มีการเปลี่ยนแปลงเมื่อพวกเขาไม่ได้ บน Mac นี้ตอบสนองกับgit config core.filemode trueฉันเปลี่ยนเป็นfalseแต่ไม่ได้ช่วย
Ryan

43

ผมมีปัญหาเหมือนกัน. หลังจาก win-> lin copy ฉันได้แก้ไขไฟล์ทั้งหมดแล้ว
ฉันใช้fromdosเพื่อแก้ไขจุดสิ้นสุดบรรทัด
แล้ว

git add -uv 

เพื่อเพิ่มการเปลี่ยนแปลง
มันเพิ่ม 3 ไฟล์ (ไม่ใช่ทั้งหมด) ซึ่งฉันแก้ไขจริง และหลังจากสถานะ gitนั้นแสดงไฟล์ที่แก้ไขเพียง 3 ไฟล์ หลังจากคอมไพล์ยอมรับทุกอย่างก็โอเคกับสถานะคอมไพล์


2
ขอบคุณนี่คือสิ่งที่ฉันต้องการ ฉันใช้คำแนะนำของ @ sehe ในการเปรียบเทียบ md5sum เพื่อตรวจสอบว่าไฟล์เหมือนกัน (ในกรณีของฉันคือพวกเขา) หลังจากนั้นใช้แฟล็ก -u กรองไฟล์เหล่านั้นอย่างถูกต้องโดยไม่มีความแตกต่างจริงจากไฟล์ที่มีการเปลี่ยนแปลง
STW

ขอบคุณมันมีประโยชน์ ฉันมีปัญหานี้หลังจากทำnpm iในรากของโครงการของฉัน อย่างใดไฟล์จำนวนมากได้รับปลายสายที่แตกต่างกันซึ่งกำลังสร้างปัญหานี้
เซิร์ฟเวอร์ Khalilov

นี่คือสิ่งที่ฉันคาดไว้ ... การเปลี่ยนแปลงที่เกิดขึ้นและส่วนที่เหลือได้เลิกทำ
Deepak


25

ในกรณีของฉันไฟล์ปรากฏว่าถูกแก้ไขหลังจากเปลี่ยนการอนุญาตไฟล์การเปลี่ยนสิทธิ์ของไฟล์

ในการแก้ไขการเพิกถอนสิทธิ์ของคอมไพล์ให้ทำดังต่อไปนี้:

# For the current repository
git config core.filemode false   

# Globally
git config --global core.filemode false

1
คำตอบของคุณช่วยให้ฉันประหยัดเวลาได้มาก ขอบคุณ!
Pavel_K

หลังจากการทำเช่นนี้ผมขอแนะนำให้ stashing / การแสดงละครที่ต้องการเปลี่ยนแปลงการตั้งค่า / core.filemodeการตรวจสอบจากแฟ้มที่มีสิทธิ์ในการเปลี่ยนแปลงของพวกเขาและจากนั้นเปิดใช้งาน :)
XtraSimplicity

ฉันมีปัญหานี้หลังจากคัดลอกไฟล์จากแล็ปท็อปเครื่องหนึ่งไปยังอีกแล็ปท็อป คงที่ของคุณบันทึกไว้ ขอบคุณ!
Sam

23

อย่างไรก็ตามไฟล์จำนวนมาก (ถ้าไม่ใช่ทุกไฟล์) จะปรากฏขึ้นตามที่ถูกแก้ไขแม้ว่าเนื้อหาจะเหมือนกันทุกประการ

ด้วย git 2.8 (มีนาคม 2016) คุณจะสามารถตรวจสอบได้อย่างรวดเร็วว่าการเปลี่ยนแปลงเหล่านั้นเกี่ยวข้องกับ eol หรือไม่

ดูกระทำ a7630bd (16 มกราคม 2016) โดยTorsten Bögershausen (tboegi )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 05f1539 , 03 Feb 2016)

ls-files: เพิ่มการวินิจฉัย eol

เมื่อทำงานในสภาพแวดล้อมข้ามแพลตฟอร์มผู้ใช้อาจต้องการตรวจสอบว่าไฟล์ข้อความถูกจัดเก็บเป็นมาตรฐานในที่เก็บหรือไม่และ.gitattributesตั้งค่าไว้อย่างเหมาะสม

ทำให้เป็นไปได้ที่จะให้ Git แสดงจุดสิ้นสุดบรรทัดในดัชนีและในแผนผังการทำงานและแอตทริบิวต์ข้อความ / eol ที่มีประสิทธิภาพ

จุดสิ้นสุดของบรรทัด (" eolinfo") แสดงดังนี้:

"-text"        binary (or with bare CR) file
"none"         text file without any EOL
"lf"           text file with LF
"crlf"         text file with CRLF
"mixed"        text file with mixed line endings.

แอตทริบิวต์ text / eol ที่มีประสิทธิภาพเป็นหนึ่งในสิ่งเหล่านี้:

"", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf"

git ls-files --eol ให้ผลลัพธ์เช่นนี้

i/none   w/none   attr/text=auto      t/t5100/empty
i/-text  w/-text  attr/-text          t/test-binary-2.png
i/lf     w/lf     attr/text eol=lf    t/t5100/rfc2047-info-0007
i/lf     w/crlf   attr/text eol=crlf  doit.bat
i/mixed  w/mixed  attr/               locale/XX.po

เพื่อแสดงให้เห็นว่าการประชุม EOL ถูกนำมาใช้ในข้อมูลในดัชนี ( ' i') และในต้นทำงาน (' w') และสิ่งที่แอตทริบิวต์มีผลสำหรับเส้นทางที่แสดงแต่ละคน


แม้ว่าสิ่งนี้จะแสดงปัญหา แต่ก็ไม่สามารถแก้ไขได้
Greeso

7

นี่คือวิธีที่ฉันแก้ไขปัญหาบน Linux ในขณะที่ฉันโคลนโครงการที่สร้างขึ้นบน Windows:

บน linux เพื่อให้สิ่งต่าง ๆ ทำงานได้อย่างถูกต้องคุณต้องมีการตั้งค่านี้: core.autocrlf = input

นี่คือวิธีการตั้งค่า: git config - global core.autocrlf input

จากนั้นโคลนโครงการอีกครั้งจาก GitHub


สิ่งนี้ใช้ได้กับฉันในสถานการณ์ที่ฉันใช้ Visual Studio บน Windows แต่ฉันกำลังทำคอมมิทและตรวจสอบเพิ่มเติมใน WSL ในบรรทัดคำสั่ง ในบรรทัดคำสั่งทุกไฟล์แสดงว่ามีการเปลี่ยนแปลง แต่ใน Visual Studio มีการเปลี่ยนแปลงเพียงไม่กี่ไฟล์ ฉันเพิ่ม autoclrf = input ในไฟล์. gitconfig ของฉันและทำการแก้ไขทันที ขอบคุณ!
Big Data Brian

5

Git คำถามที่พบบ่อยมีคำตอบที่อาจเกี่ยวข้องแม้ว่าฉันไม่เคยเจอแบบนี้มาก่อน:

เหตุใดบางครั้ง git จึงแสดงรายการไฟล์ที่ไม่มีการเปลี่ยนแปลง

git diff และการดำเนินการอื่น ๆ ของ git นั้นได้รับการปรับให้เหมาะสมดังนั้นจึงไม่แม้แต่จะดูไฟล์ที่มีสถานะ (ขนาด, เวลาในการแก้ไข ฯลฯ ) บนดิสก์และในดัชนีของ git นั้นแตกต่างกัน สิ่งนี้ทำให้คอมไพล์แตกต่างอย่างรวดเร็วมากสำหรับการเปลี่ยนแปลงเล็กน้อย หากสัมผัสไฟล์อย่างใด git diff ต้องดูเนื้อหาและเปรียบเทียบซึ่งเป็นการทำงานที่ช้ากว่ามากแม้ว่าจริง ๆ แล้วจะไม่มีการเปลี่ยนแปลง git diff แสดงไฟล์ต่าง ๆ เพื่อเตือนว่ามันไม่ได้ใช้อย่างเหมาะสม การเรียกใช้สถานะ git จะไม่เพียงแสดงสถานะ แต่จะอัปเดตดัชนีด้วยสถานะสำหรับดิสก์ไฟล์ที่ไม่เปลี่ยนแปลงซึ่งจะทำให้การดำเนินการที่ตามมาไม่เพียง แต่แตกต่างกันเร็วกว่ามาก กรณีทั่วไปที่ทำให้หลายไฟล์ถูกแสดงรายการโดย diff กำลังรันคำสั่งการแก้ไขจำนวนมากเช่น perl -pi -e '... '

อะไรที่git statusแสดงให้คุณเห็น?


git statusเพียงแค่แสดงรายการไฟล์ขนาดใหญ่ในส่วนที่แก้ไข
Aron Rotteveel

@Aron: ขึ้นอยู่กับเบาะแสที่ฉันจะพูด: 85% พูดว่าการแปลง
บรรทัด

4
ว้าว. เตือนความจำว่าเอกสาร git ทางการบางส่วนที่ไม่สามารถเข้าใจได้เป็นอย่างไร
ดาวอังคาร

2

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


2

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

ปรากฎว่าฉันคิดออกเพราะฉันคิดว่าฉันควรจะปรับปรุง Git เป็นเวอร์ชั่นล่าสุดซึ่งฉันทำ แต่ทำงานอยู่ git --versionคืนหมายเลขเวอร์ชันเก่า หลังจากการตามล่าหาสาเหตุฉันพบรูตไดเรกทอรี cygwin bin ในเส้นทางสภาพแวดล้อมของฉันซึ่งมีไฟล์เรียกทำงาน git ซึ่งทำงานที่หมายเลขเวอร์ชันเก่า ไปคิด

สิ่งนี้หายากเพราะฉันติดตั้ง TortoiseGit เครื่องมือบรรทัดคำสั่งของฉันจะใช้รุ่น cygwin เนื่องจากเส้นทางล้มและ TortoiseGit ได้รับการกำหนดค่าให้ใช้รุ่น windows ทำให้สับสนยิ่งขึ้น

หวังว่านี่จะช่วยใครซักคน


1
จับดี. +1 นั่นคือเหตุผลที่ฉันตั้งเส้นทางของฉันเองเสมอเช่นเดียวกับในstackoverflow.com/a/44351065/6309
VonC

ฉันมักจะให้โปรแกรมติดตั้งตั้งค่า PATH แต่จากนั้นตรวจสอบด้วยตนเองซึ่งฉันทำที่นี่ การติดตั้งก่อนหน้าของฉันมี git 2.4.x (x86) และฉันติดตั้ง git 2.13.x (x64) คุณสามารถจินตนาการถึงความสับสนของฉันเมื่อฉันลบการอ้างอิงเส้นทาง x86 และยังได้รับ 2.4 !! นั่นคือเมื่อฉันเห็นไดเรกทอรี bin ของ cygwin และดูเหมือนว่าสถานที่ตรรกะถัดไปที่จะมอง ดังนั้นการตั้งค่า FWIW หรือแม้กระทั่งตรวจสอบเส้นทางของคุณด้วยสายตาอาจไม่สามารถแก้ไขได้หากไดเรกทอรีถัง Cygwin อยู่ในรายการก่อน!
dudewad

1

core.ignorecaseรายการเพียงผู้ต้องสงสัยในการตั้งค่าของคุณดูว่าฉันจะ คุณสามารถลองยกเลิกการตั้งค่าด้วย:

  git config --unset core.ignorecase

... และดูว่าเอาต์พุตจากgit statusหรือgit diffแตกต่างกัน



0

สำหรับฉันมันเป็นเพราะ 2 linux VMs ถูกแมปกับระบบไฟล์ภายในบ้านเดียวกัน VM หนึ่งรัน git-1.7.1 อีกอันหนึ่งกำลังรัน git-2.14

VM ที่กำลังรัน git-1.7.1 จะแสดง 4 ไฟล์เสมอเมื่อมีการเปลี่ยนแปลง (แม้จะคิดว่าเนื้อหาและการสิ้นสุดบรรทัดนั้นเหมือนกัน)

เมื่อ 'สถานะ git' ถูกเรียกใช้บน VM ที่รัน g-2.14 แล้ว VM ทั้งสองจะเริ่มรายงานที่เก็บข้อมูลว่าสะอาด 'สถานะคอมไพล์' มีผลข้างเคียง มันไม่ได้เป็นการดำเนินการที่ไม่เปลี่ยนรูป และ git-1.7.1 ไม่เข้าใจโลกในแบบเดียวกับที่ git-2 + ทำ

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