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

前端 未结 8 2127
天命终不由人
天命终不由人 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

    0 讨论(0)
  • 2021-01-29 19:41

    I know that some people have used hgsubversion with the Subversion bridge. I don't know how well it worked, and I've never had to use TFS.

    As far as I'm aware, there's no "more native" bridge than using TFS -> Subversion Bridge -> hgsubversion, but I've also heard that it works fairly well. My extremely limited understanding of TFS suggests that its internal model should be similar enough to Subversion for things like hgsubversion to work really well.

    0 讨论(0)
提交回复
热议问题