Enfrentei esse mesmo problema e encontrei uma solução para ele. Primeiro, adicionei todos os arquivos ao repositório central (também os do desenvolvedor).
Portanto, se um desenvolvedor busca os arquivos do repositório, a configuração do desenvolvedor também está lá. Ao fazer alterações neste arquivo, o Git não deve estar ciente dessas alterações. Dessa forma, as alterações não podem ser enviadas / confirmadas para o repositório, mas permanecem localmente.
Eu resolvi isso usando o comando git: update-index --assume-unchanged
. Fiz um arquivo bat que é executado na pré-construção dos projetos que contêm um arquivo cujas alterações devem ser ignoradas pelo Git. Aqui está o código que coloquei no arquivo 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
No meu pré-desenvolvimento, eu faria uma chamada para o arquivo bat, por exemplo:
call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
Encontrei no SO um arquivo bat que copia o arquivo de configuração correto para o web.config / app.config. Também chamo esse arquivo bat no pré-desenvolvimento. O código para este arquivo 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.
No meu pré-desenvolvimento, eu faria uma chamada para o arquivo bat, por exemplo:
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config