ไฟล์ที่แสดงว่าถูกแก้ไขโดยตรงหลังจากโคลน Git


227

ฉันมีปัญหากับที่เก็บในขณะนี้และถึงแม้ว่า Git-fu ของฉันจะดี แต่ฉันไม่สามารถแก้ปัญหานี้ได้

เมื่อฉันโคลนที่เก็บนี้จากนั้นcdลงในที่เก็บgit statusจะแสดงหลาย ๆ ไฟล์ตามที่มีการเปลี่ยนแปลง หมายเหตุ: ฉันไม่ได้เปิดที่เก็บในโปรแกรมแก้ไขหรืออะไร

ฉันลองทำตามคำแนะนำนี้: http://help.github.com/dealing-with-lineendings/แต่สิ่งนี้ไม่ได้ช่วยแก้ไขปัญหาของฉันเลย

ฉันลองมาgit checkout -- .หลายครั้งแล้ว แต่ดูเหมือนจะไม่ทำอะไรเลย

ฉันใช้ Mac และไม่มี submodules ในที่เก็บ

ระบบไฟล์คือระบบไฟล์ "Journaled HFS +" บน Mac และไม่คำนึงถึงขนาดตัวพิมพ์ ไฟล์เป็นหนึ่งบรรทัดและประมาณ 79 KB ต่อไฟล์ (ใช่คุณได้ยินถูกต้อง) ดังนั้นการดูที่git diffไม่มีประโยชน์เป็นพิเศษ ฉันเคยได้ยินเกี่ยวกับการทำgit config --global core.trustctime falseสิ่งที่อาจช่วยได้ซึ่งฉันจะลองเมื่อฉันกลับไปที่คอมพิวเตอร์โดยใช้ที่เก็บข้อมูล

ฉันเปลี่ยนรายละเอียดของระบบไฟล์ด้วยข้อเท็จจริง! และฉันลองใช้git config --global core.trustctime falseเคล็ดลับที่ไม่ได้ผลดีมาก

คำตอบ:


141

ฉันมีปัญหาเดียวกันบน Mac หลังจากโคลนที่เก็บ มันจะถือว่าไฟล์ทั้งหมดมีการเปลี่ยนแปลง

หลังจากทำงานgit config --global core.autocrlf inputแล้วมันยังคงทำเครื่องหมายไฟล์ทั้งหมดว่ามีการเปลี่ยนแปลง หลังจากมองหาวิธีแก้ไขฉันเจอ.gitattributesไฟล์ในโฮมไดเร็กตอรี่ซึ่งมีดังต่อไปนี้.

* text=auto

ฉันแสดงความคิดเห็นออกไปและที่เก็บโคลนอื่น ๆ นับจากนี้ทำงานได้ดี


5
ขอบคุณ! ในที่สุดฉันก็พบสิ่งนี้หลังจากใช้เวลาตลอดช่วงเย็นในการสลับ core.autocrlf และใช้พื้นที่สีขาว สิ่งนี้ใช้ได้ผล ขอบคุณ.
xer0x

5
บรรทัดที่ละเมิดใน. gitattributes มาจากdotfiles ของ Mathias Bynenในกรณีที่มีคนอื่นเจอ
SeanPONeil

31
ใครสามารถให้แสงเพิ่มเติมเกี่ยวกับการกำหนดค่าเฉพาะนี้ อะไร* text=autoทำอย่างไร การลบออกจาก.gitattributesอะไร ฉันเห็นมันช่วยแก้ไขปัญหานี้ให้ฉัน แต่ฉันไม่แน่ใจว่าทำไมถึงทำเช่นนั้นและมันกำลังทำอะไรอยู่และสิ่งที่เป็นไปได้ที่อาจสร้างปัญหา
เดนนิส

6
@Dennis การตั้งค่านี้ช่วยให้มาตรฐานการสิ้นสุดบรรทัดปกติดังนั้นการลบมันอาจไม่ใช่คำตอบที่ถูกต้อง ดูคำถามนี้ 's คำตอบและบทความนี้ คำตอบของ @Arrowmaster ด้านล่างมีประโยชน์มากสำหรับฉัน ฉันใช้git addและgit commitไฟล์ที่เป็นมาตรฐานและกำจัดปัญหา
jtpereyda

4
git config --global core.autocrlf inputแก้ไขให้ฉัน ขอบคุณ
dimiguel

89

ฉันเข้าใจแล้ว. นักพัฒนาอื่น ๆ ทั้งหมดอยู่ใน Ubuntu (ฉันคิดว่า) และมีระบบไฟล์แบบตรงตามตัวพิมพ์ใหญ่ - เล็ก อย่างไรก็ตามฉันทำไม่ได้ (อย่างที่ฉันเป็นบน Mac) git ls-tree HEAD <path>อันที่จริงทุกไฟล์ที่ได้เป็นตัวพิมพ์เล็กฝาแฝดเมื่อฉันเอาดูที่พวกเขาใช้

ฉันจะเอาหนึ่งในนั้นออกมา


พวกเขาเคยเรียงลำดับออกมา? ฉันอาจมีปัญหาเดียวกัน
Josh Johnson

8
ใช่เพียงแค่รับคนที่มีระบบไฟล์ที่คำนึงถึงขนาดตัวพิมพ์เพื่อลบทั้งหมดยกเว้นหนึ่งไฟล์จากแต่ละชุดของไฟล์ซึ่งจะมีชื่อไฟล์ซ้ำกันในระบบไฟล์
Sam Elliott

1
เพิ่งพบปัญหาเดียวกันตั้งแต่เปลี่ยนจาก Ubuntu เป็น Mac ขอบคุณคำตอบของคุณกระแทกที่หัว หวังว่า upvote ผลักดันมันไปที่ตำแหน่งแรก :-)
chmac

1
@Dirk นี่คือเหตุผลที่มีคำตอบหลายคำ ฉันยอมรับสิ่งที่ใช้ในกรณีของฉันซึ่งไม่สมเหตุสมผล
Sam Elliott

1
นี่คือปัญหาของฉันเช่นเดียวกับ MacOS ที่ไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก อย่างไรก็ตามgit ls-tree HEAD <path>แสดงเพียงไฟล์เดียว อย่างไรก็ตามฉันสามารถดูไฟล์ที่ซ้ำกันใน GitHub.com UI และใช้ UI นั้นเพื่อลบหนึ่งเวอร์ชัน
orion elenzil

74
git config core.fileMode false

แก้ไขปัญหานี้ในกรณีของฉัน

https://git-scm.com/docs/git-config

TL; DR;

core.fileMode

หากเป็นเท็จความแตกต่างของบิตที่เรียกทำงานได้ระหว่างดัชนีและแผนผังการทำงานจะถูกละเว้น มีประโยชน์กับระบบไฟล์ที่ใช้งานไม่ได้เช่น FAT ดู git-update-index (1)

ค่าเริ่มต้นคือความจริงยกเว้น git-clone (1) หรือ git-init (1) จะสอบสวนและตั้งค่า core.fileMode false ถ้าเหมาะสมเมื่อสร้างที่เก็บข้อมูล


2
แต่สิ่งนี้ทำอะไร ??
Siwel

1
ฉันก็อยากจะรู้ว่าสิ่งนี้ทำอะไรได้บ้างเพราะมันได้ผลสำหรับฉันเช่นกัน
Donato

2
เมื่อฉันทำgit diffฉันพบว่าการเปลี่ยนแปลงอยู่ในโหมดไฟล์เท่านั้น รับ git chmod -R 777 .ที่เกิดขึ้นเมื่อฉันวิ่งโครงการของฉันและการกำหนดค่านี้อนุญาตให้ฉันไม่สนใจการเปลี่ยนแปลง chmod โดย git stackoverflow.com/q/1580596/6207775
Ayushya

1
ลิงก์ใช้งานไม่ได้ ( "ขออภัยเราไม่พบเมล็ดของคุณ" )
Peter Mortensen

คำตอบที่เหลือไม่ได้ผล แต่มันก็เป็นเวทย์มนตร์!
พบ Patel

53

ฉันถือว่าคุณใช้ Windows หน้า GitHub นั้นที่คุณเชื่อมโยงไปนั้นมีรายละเอียดย้อนหลัง ปัญหาคือว่าจุดสิ้นสุดของบรรทัด CR + LF ได้ถูกส่งไปยังที่เก็บข้อมูลแล้วและเนื่องจากคุณมีcore.autocrlfตั้งค่าเป็นจริงหรืออินพุต Git ต้องการแปลงสิ้นสุดบรรทัดเป็น LF ดังนั้นgit statusแสดงว่าไฟล์ทุกไฟล์มีการเปลี่ยนแปลง

หากนี่เป็นที่เก็บข้อมูลที่คุณต้องการเข้าถึง แต่ไม่มีส่วนเกี่ยวข้องคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อซ่อนปัญหาโดยไม่ต้องแก้ไข

git config core.autocrlf false

หากนี่คือที่เก็บข้อมูลที่คุณจะมีส่วนร่วมและสามารถยอมรับการเปลี่ยนแปลงได้ คุณอาจต้องการแก้ไขปัญหาด้วยการทำคอมมิชชันที่เปลี่ยนแปลงการสิ้นสุดบรรทัดทั้งหมดในที่เก็บเพื่อใช้ LF แทน CR + LF จากนั้นทำตามขั้นตอนเพื่อป้องกันไม่ให้เกิดขึ้นอีกในอนาคต

ข้อมูลต่อไปนี้นำมาโดยตรงจากหน้า man gitattributesและควร preformed จากไดเรกทอรีการทำงานที่สะอาด

echo "* text=auto" >>.gitattributes
rm .git/index     # Remove the index to force Git to
git reset         # re-scan the working directory.
git status        # Show files that will be normalized.
git add -u
git add .gitattributes
git commit -m "Introduce end-of-line normalization"

หากไฟล์ใด ๆ ที่ไม่ควรจะเป็นปกติแสดงขึ้นในgit status, git add -uล้างค่าแอตทริบิวต์ข้อความของพวกเขาก่อนที่จะใช้

manual.pdf      -text

ในทางกลับกันไฟล์ข้อความที่ Git ไม่ตรวจพบสามารถเปิดใช้งานการทำให้เป็นมาตรฐานได้ด้วยตนเอง

weirdchars.txt  text

8
ฉันไม่ได้ใช้ windows
Sam Elliott

1
โดยค่าเริ่มต้นในระบบที่ไม่ใช่ Windows, core.autocrlf ถูกตั้งค่าเป็นเท็จ ดังนั้นคุณไม่ควรประสบปัญหานี้ด้วยซ้ำถ้ามันเกิดจากการวางสาย คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าเฉพาะของคุณเช่นสิ่งที่git diffแสดงสำหรับไฟล์ที่git statusระบุว่าได้รับการแก้ไขรวมถึงระบบไฟล์ที่คุณใช้
Arrowmaster

อัปเดตคำถามพร้อมคำตอบสำหรับคำถามเหล่านี้ จะดูรายละเอียดทั้งหมดในอีกหนึ่งหรือสองวินาที ฉันไม่แน่ใจว่าสมาชิกทีม dev คนอื่นกำลังใช้งานอะไร
Sam Elliott

นี่คือสิ่งที่ได้ผลสำหรับเรา ( git config core.autocrlf falseเพียงพอ) เราถูกหลอกโดยความจริงที่ว่าลูกค้ากำลังทำงานบน Linux (SL / RHEL) แต่เซสชัน Linux นั้นเริ่มต้นผ่าน x2go จากโฮสต์ Windows ดังนั้นนี่อาจเป็นทางออกที่เป็นไปได้มากที่สุดในบริบทของ Win + Lin
เดิร์ค

37

กรุณาเรียกใช้คำสั่งต่อไปนี้ ที่อาจแก้ปัญหาได้

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

ไม่มีวิธีแก้ปัญหาอื่นที่ใช้งานได้สำหรับฉัน แต่อันนี้ทำให้ฉันกลับมาทำงานได้
rainabba

1
ฉันลองอันนี้แล้วมันก็ใช้ได้ผลสำหรับฉัน ขอบคุณ Mr. LIama!
Danniel Little

สิ่งนี้ทำให้ที่เก็บของฉันแย่ลง ในสาขาที่ไม่มีการเปลี่ยนแปลงฉันมี 277 หลังจากใช้งาน ฉันมีการเปลี่ยนแปลงเหมือนกันในสาขาอื่นที่ฉันเปลี่ยนไปเช่นกัน วิ่งด้วยความระมัดระวัง ฉันเพิ่ง recloned โดย repo และมีการแก้ไขไฟล์ 615 :(
โปรแกรมเมอร์ Paul

สิ่งนี้ใช้ได้กับฉันโดยใช้ git v2.7.4 กับ ubuntu (WSL), Git สำหรับ Windows v2.18.0.windows.1 และ posh-git ฉันมี autocrlf false อยู่เสมอและปัญหาเริ่มต้นใน Git สำหรับ Windows และ posh-git หลังจากอัปเกรดเป็น 2.18.0 วันนี้
Jim Frenette

ฉันประหลาดใจกับงานนี้ ขอบคุณสำหรับความช่วยเหลือ สำหรับคนอื่น ๆ ที่จะใช้เส้นทางนี้ไฟล์ที่ดูเหมือนจะถูกแก้ไขคือไฟล์. png และ. bmp ทั้งหมดที่จัดการโดย git LFS
David Casper

16

ใน Visual Studio หากคุณใช้ Git คุณสามารถสร้างไฟล์. gitignore และ. gitattributes อัตโนมัติ ไฟล์. getattributes ที่สร้างขึ้นอัตโนมัติมีบรรทัดต่อไปนี้:

* text=auto

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


1
ขอบคุณที่ต้องดิ้นรนกับเรื่องนี้เพื่อ aaaages
Andrew Berry

นี่เป็นปัญหาของฉันอย่างแน่นอน ผู้พัฒนารายอื่นใช้ GIT ผ่าน VS แทน CLI และสร้างไฟล์. gitattributes นี้
Josh Maag

12

ปัญหาอาจเกิดจากการให้สิทธิ์ไฟล์ต่างกันเช่นในกรณีของฉัน

ที่เก็บโคลนสด (Windows, Cygwin):

$ git ls-tree HEAD
100755 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑

พื้นที่เก็บข้อมูลระยะไกลเปลือย (Linux):

$ git ls-tree HEAD
100644 blob 8099ea496a2c78d71125d79a05855f60ebf07904    testfile
   ↑↑↑

5

ฉันต้องการที่จะเพิ่มคำตอบให้กับ "ทำไม" สิ่งนี้เกิดขึ้นเพราะมีคำตอบที่ดีเกี่ยวกับวิธีการแก้ไข

ดังนั้น.gitattributesมีการ* text=autoตั้งค่าซึ่งทำให้เกิดปัญหานี้

ในกรณีของฉันไฟล์ในสาขาหลักของ GitHub มี\r\nจุดจบ ฉันหมุนหมายเลขการตั้งค่าบนที่เก็บเพื่อเช็คอินด้วย\nตอนจบ ฉันไม่รู้ว่า Git เช็คเอาท์อย่างไร มันควรจะตรวจสอบกับการสิ้นสุดพื้นเมืองบนกล่อง Linux ของฉัน ( \n) แต่ฉันเดาว่ามันตรวจสอบไฟล์ที่มี\r\nตอนจบ Git บ่นเพราะเห็น\r\nจุดจบที่เช็คเอาท์อยู่ในที่เก็บและเตือนฉันว่ามันจะตรวจสอบ\nการตั้งค่า ดังนั้นไฟล์จะถูก "แก้ไข"

นั่นคือความเข้าใจของฉันในตอนนี้


3

ผมมีปัญหาเหมือนกัน. ยังมี Mac ดูที่เก็บในเครื่อง Linux ฉันสังเกตว่าฉันมีสองไฟล์:

geoip.dat และ GeoIP.dat

ฉันลบอันที่เลิกใช้แล้วบนเครื่อง Linux และโคลนที่เก็บข้อมูลอีกครั้งกับ Mac ฉันไม่สามารถดึงกระทำซ่อนหรือดึงออกจากสำเนาของที่เก็บเมื่อมีการทำซ้ำ


3

ปัญหาเดียวกันสำหรับฉัน ฉันเห็นภาพหลายภาพที่มีชื่อเหมือนกันเช่น "textField.png" และ "textfield.png" ในที่เก็บ Git ระยะไกล แต่ไม่ใช่ที่เก็บในเครื่องของฉัน ฉันสามารถเห็น "textField.png" เท่านั้นซึ่งไม่ได้ใช้ในรหัสของโครงการ

ปรากฎว่าส่วนใหญ่ของเพื่อนร่วมงานของฉันอยู่ใน Ubuntu โดยใช้ext4ระบบไฟล์ในขณะที่ฉันใช้ Mac โดยใช้ APFS

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

จากนั้นฉันก็วิ่งต่อไปนี้:

# Remove everything from the index.
git rm --cached -r .

# Write both the index and working directory from git's database.
git reset --hard

สุดท้ายเราตัดสินใจว่านักพัฒนาทุกคนควรเปลี่ยนการกำหนดค่า Git ของเขาเพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้นอีกครั้ง:

# Local Git configuration
git config core.ignorecase = true

หรือ

# Global Git configuration
git config --global core.ignorecase = true

มันจะดีกว่าถ้าคุณเพียงแค่คำตอบupvotedของ @ kds !
Elharony

ดูเหมือนว่าคำสั่งบรรทัดคำสั่งไม่ควรมีเครื่องหมายเท่ากับ ( =) เพราะมันจะจบลงในignorecase = =ไฟล์ config
Dmytro

1

ฉันก็มีปัญหาเดียวกัน ในกรณีของฉันฉันโคลนที่เก็บและบางไฟล์หายไปทันที

ปัญหานี้เกิดจากเส้นทางไปยังไฟล์และชื่อไฟล์ยาวเกินไปสำหรับ Windows หากต้องการแก้ไขให้คัดลอกที่เก็บใกล้กับรูทของฮาร์ดดิสก์ไดรฟ์มากที่สุดเพื่อลดความยาวของพา ธ ไปยังไฟล์ ยกตัวอย่างเช่นโคลนมันแทนC:\A\GitRepoC:\Users Documents\yyy\Desktop\GitRepo


1

แก้ไขไฟล์ชื่อ.git/config:

sudo gedit .git/config

หรือ:

sudo vim .git/config

สารบัญ

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true

[remote "origin"]
    url = kharadepramod@bitbucket.org:DigitalPlumbing/unicorn-magento.git
    fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
    remote = origin
    merge = refs/heads/master

[branch "productapproval"]
    remote = origin
    merge = refs/heads/productapproval

เปลี่ยนเข้าไปfilemode=truefilemode = false


สิ่งนี้เทียบเท่ากับgit config core.Filemode false
Guillermo Prandi

1

สำหรับ macOS เวอร์ชั่นใหม่อาจเกิดจากคุณสมบัติความปลอดภัยของระบบปฏิบัติการ

ในพื้นที่เก็บข้อมูลที่ฉันทำงานอยู่มีไฟล์ไบนารีที่มี * .app เป็นประเภทไฟล์

มันเป็นเพียงข้อมูลที่ต่อเนื่องกัน แต่ macOS ถือว่าไฟล์ * .app ทั้งหมดเป็นแอปพลิเคชันและเนื่องจากไฟล์นี้ไม่ได้ถูกดาวน์โหลดโดยผู้ใช้ระบบถือว่าไม่ปลอดภัยและเพิ่มcom.apple.quarantineคุณสมบัติไฟล์ซึ่งทำให้แน่ใจว่าไฟล์นั้นไม่สามารถดำเนินการได้

แต่การตั้งค่าแอททริบิวต์นี้ในไฟล์ก็เป็นการเปลี่ยนไฟล์ด้วยเช่นกันดังนั้นจึงปรากฏในชุดการเปลี่ยนแปลง Git ที่ไม่มีการคืนค่า

คุณสามารถตรวจสอบว่าคุณมีปัญหาเดียวกันโดยการเรียกใช้ $ xattr file.appคุณสามารถตรวจสอบถ้าคุณมีปัญหาเดียวกันโดยการทำงาน

การแก้ปัญหาค่อนข้างง่ายตราบใดที่คุณไม่ต้องทำงานกับไฟล์ เพียงแค่เพิ่มที่คุณ*.app binary.gitattributes


0

ฉันคัดลอกที่เก็บในเครื่องไปยังโฟลเดอร์อื่นและมีไฟล์ที่แก้ไขมากมายปรากฏขึ้น วิธีแก้ปัญหาของฉันถูกฉัน stashed แก้ไขไฟล์และลบซ่อน ที่เก็บเริ่มสะอาด


0

ฉันพบว่า Git กำลังรักษาไฟล์ของฉัน (.psd ในกรณีนี้) เป็นข้อความ การตั้งค่าเป็นชนิดไบนารีใน. gitattributes แก้ไขได้

*.psd binary

0

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

git rm -rf the-folder-with-modified-stuff
git ci -m 'WAT'

บูม! ล้างที่เก็บข้อมูล แก้ไขปัญหา. จากนั้นฉันก็ต้องทิ้งภาระผูกพันสุดท้ายเมื่อฉันทำของฉันrebase -iและในที่สุดทุกอย่างก็สะอาดอีกครั้ง แปลก!


0

ในกรณีที่ช่วยคนอื่นอาจมีสาเหตุอื่นสำหรับปัญหานี้: รุ่น Git ที่แตกต่างกัน ฉันใช้ Git รุ่นที่ติดตั้งเป็นค่าเริ่มต้นบนกล่อง Ubuntu 18.04 (Bionic Beaver) และทุกอย่างทำงานได้ดี แต่เมื่อพยายามโคลนที่เก็บโดยใช้ Git บน Ubuntu 16.04 บางไฟล์ก็แสดงว่าถูกดัดแปลง

ไม่มีคำตอบอื่นใดที่นี่แก้ไขปัญหาของฉันได้ แต่การอัพเกรด Git ให้ตรงกับทั้งสองระบบไม่สามารถแก้ไขปัญหาได้


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