Real-world use of Mercurial with a Team Foundation Server?

前端 未结 8 2125
天命终不由人
天命终不由人 2021-01-29 19:18

My shop uses TFS & is generally happy with it with the exception of the lack of local repository commits/reverts. I\'m starting to use Mercurial locally myself to help manag

8条回答
  •  伪装坚强ぢ
    2021-01-29 19:39

    @Eric, your post at lostechies was most helpful. With VS2010 I had to add options /diff and /deletes to the tftp online command in the push script to get changed and deleted files to be checked in to TFS. Initially I was getting an error from push when a file has been deleted (from -working) that hg update is
    "unable to remove FileXyz : access is denied".
    I installed the MakeWritable.py extension but that only works when files are opened not deleted. So I added a call to attrib to remove the READ-ONLY from all files in the project and then restore it afterwards (excluding the .hg folder) I also added the /diff option so that differences are detected by MD5 checksum instead of depending on the READ-ONLY attribute. Seems to be working fine now.

    =====FILE: push.ps1=====
    $projName = "TicTacToeCMMI"
    $tftp = "C:\Program Files\Microsoft Team Foundation Server 2010 Power Tools\TFPT.exe"
    $tf = "C:\Program Files\Microsoft Visual Studio 10.0\Common7\ide\tf.exe"
    
    hg push
    cd ..\$projName-tfs  
    "Syncing -tfs workspace with TFS server"  
    &$tftp scorch /noprompt /exclude:.hg',_Resharper*',*.user  
    "Making all files in -tfs writable"
    attrib -R /S /D *
    "Updating -tfs with latest push from Mercurial"
    hg update -C -y
    attrib +R /S /D *
    attrib -R /S /D .hg\*
    "Resyncing Mercurial changes with TFS Server"  
    &$tftp online /adds /deletes /diff /exclude:'.hgignore,.hg,bin,obj,*.ps1,_Resharper*,*.lnk,*.user,*.suo,*.vspscc'  
    "Checkin"  
    &$tf checkin  
    cd ..\$projName-working  
    cmd /c pause  
    
    ====FILE: pull.ps1=====
    $projName = "TicTacToeCMMI"
    $tf = "C:\Program Files\Microsoft Visual Studio 10.0\Common7\ide\tf.exe"
    $username = cmd /c set USERNAME
    $username = $username.SubString($username.IndexOf("=")+1)
    
    function pull {
        cd ..\$projName-tfs
        &$tf get
        hg commit -A -m "from tfs" --user $username
        cd ..\$projName-working
        hg pull --rebase
    }
    pull  
    cmd /c pause  
    

    I had a bit of a learning curve with PowerShell scripts which I hadn't used before. For others like me the scripts are run with a shortcut like this:

    TARGET: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\dev\TicTacToeCMMI-working\push.ps1
    START IN: C:\dev\TicTacToeCMMI-working
    

    I put push and pull shortcuts on my task bar so push/pull to/from TFS is a single click

提交回复
热议问题