How do you deal with configuration files in source control?

前端 未结 19 1989
情书的邮戳
情书的邮戳 2020-11-27 13:00

Let\'s say you have a typical web app and with a file configuration.whatever. Every developer working on the project will have one version for their dev boxes, there will be

19条回答
  •  無奈伤痛
    2020-11-27 13:38

    I faced that same problem and I found a solution for it. I first added all the files to the central repository (also the developer ones).

    So if a developer fetches the files from the repository the developer config is also there. When changing made to this file, Git should not be aware of these changes. That way changes cannot be pushed/committed to the repository but stay locally.

    I solved this by using the git command: update-index --assume-unchanged. I made a bat file that is executed in the prebuild of the projects that are containing a file whose changes should be ignore by Git. Here is the code I put in the bat file:

    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
    

    In my prebuild I would made a call to the bat file, for example:

    call "$(ProjectDir)\..\..\MakeFileBehaveLikeUnchangedForGit.bat" "$(ProjectDir)Web.config.developer" "$(SolutionDir)"
    

    I found on SO a bat file that copies the correct config file to the web.config/app.config. I also call this bat file in the prebuild. The code for this bat file is:

    @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.
    

    In my prebuild I would made a call to the bat file, for example:

    call "$(ProjectDir)\..\..\copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config
    

提交回复
热议问题