ฉันประสบปัญหาเดียวกันนี้และพบวิธีแก้ปัญหา ก่อนอื่นฉันเพิ่มไฟล์ทั้งหมดลงในที่เก็บส่วนกลาง (รวมถึงไฟล์ของนักพัฒนาด้วย)
ดังนั้นหากนักพัฒนาดึงไฟล์จากที่เก็บก็จะมีการกำหนดค่านักพัฒนาอยู่ที่นั่นด้วย เมื่อทำการเปลี่ยนแปลงไฟล์นี้ Git ไม่ควรตระหนักถึงการเปลี่ยนแปลงเหล่านี้ การเปลี่ยนแปลงดังกล่าวไม่สามารถผลักดัน / ตกลงกับที่เก็บได้ แต่ยังคงอยู่ในเครื่อง
update-index --assume-unchanged
ฉันจะแก้ไขเรื่องนี้โดยใช้คำสั่งคอมไพล์: ฉันสร้างไฟล์ bat ที่ดำเนินการใน prebuild ของโปรเจ็กต์ที่มีไฟล์ที่ Git ควรละเว้นการเปลี่ยนแปลง นี่คือรหัสที่ฉันใส่ในไฟล์ bat:
IF NOT EXIST %2%\.git GOTO NOGIT
set fileName=%1
set fileName=%fileName:\=/%
for /f "useback tokens=*" %%a in ('%fileName%') do set fileName=%%~a
set "gitUpdate=git update-index --assume-unchanged"
set parameter= "%gitUpdate% %fileName%"
echo %parameter% as parameter for git
"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c %parameter%
echo Make FIleBehaveLikeUnchangedForGit Done.
GOTO END
:NOGIT
echo no git here.
echo %2%
:END
ในการสร้างล่วงหน้าของฉันฉันจะโทรไปที่ไฟล์ bat ตัวอย่างเช่น:
call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
ฉันพบไฟล์ bat ใน SO ที่คัดลอกไฟล์ config ที่ถูกต้องไปยัง web.config / app.config ฉันยังเรียกไฟล์ค้างคาวนี้ในการสร้างล่วงหน้า รหัสสำหรับไฟล์ bat นี้คือ:
@echo off
echo Comparing two files: %1 with %2
if not exist %1 goto File1NotFound
if not exist %2 goto File2NotFound
fc %1 %2
if %ERRORLEVEL%==0 GOTO NoCopy
echo Files are not the same. Copying %1 over %2
copy %1 %2 /y & goto END
:NoCopy
echo Files are the same. Did nothing
goto END
:File1NotFound
echo %1 not found.
goto END
:File2NotFound
copy %1 %2 /y
goto END
:END
echo Done.
ในการสร้างล่วงหน้าของฉันฉันจะโทรไปที่ไฟล์ bat ตัวอย่างเช่น:
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config