Me enfrenté al mismo problema y encontré una solución. Primero agregué todos los archivos al repositorio central (también los del desarrollador).
Entonces, si un desarrollador recupera los archivos del repositorio, la configuración del desarrollador también está allí. Al realizar cambios en este archivo, Git no debería estar al tanto de estos cambios. De esa manera, los cambios no se pueden enviar / confirmar en el repositorio, sino que permanecen localmente.
He resuelto esto usando el comando git: update-index --assume-unchanged
. Hice un archivo bat que se ejecuta en la construcción previa de los proyectos que contienen un archivo cuyos cambios deben ser ignorados por Git. Aquí está el código que puse en el archivo 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
En mi compilación previa, haría una llamada al archivo bat, por ejemplo:
call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
Encontré en SO un archivo bat que copia el archivo de configuración correcto en web.config / app.config. También llamo a este archivo bat en el archivo prebuild. El código para este archivo bat es:
@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.
En mi compilación previa, haría una llamada al archivo bat, por ejemplo:
call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config