2009-09-10 3 views
3

TFS에 직접 상위/하위 관계가없는 두 개의 TFS 분기가 있습니다. 예를 들어, 특정 개정판 94에서는 여러 항목이 삭제되었습니다. 나는 그 삭제를 메인 브랜치에 적용하는 임무를 가졌다. 근거없는 병합을 통해 그렇게하고 싶습니다.Team Foundation Server 기초가없는 병합에서 병합 삭제

tf merge /baseless /recursive /version:94 .\programs\program1 ..\Release\programs\program1 

트리에있는 항목의 대부분은 "병합"로 표시하고, 일부는 "편집 병합"로 표시된 : 나는 그렇게하려면 다음 명령을 시도했다. 그러나 대상에서 삭제 된 항목이 없습니다. 변덕에 난과 같이 삭제 한 이상 병합하려고 :

tf merge /baseless /recursive /version:94 .\programs\program1\source1.cs ..\Release\programs\program1\source1.cs 

나는 다음과 같은 오류 메시지가 있어요 :이 어떻게해야합니까

The item [TFS_PATH] does not exist at the specified version. 

를? 삭제를 모두 피할 수있는 방법이 있습니까?

답변

2

하면 위의 내 버전입니다. 나를 위해 작동하는 것 같다 :

get-tfsChangeset xx |% {$_.changes} |? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } |% {$_.item.serverItem -replace "\$/branch1","$/branch2"} | Add-TfsPendingChange -delete 

이 더욱 유용하게, 하나는보다 편리하게 처리 할 수 ​​있도록 변경 집합 번호 및 지점 경로 변수화 할 수 있습니다. 예를 들어

는 특정 지점에있는 모든 삭제는 원본 위치에서이 실행 처리하는 :

$sourcePath="\$/MySourcePath" 
$destPath="$/MydestPath" 

Get-TfsItemHistory ./*.sql -r -IncludeItems | %{$_.changes} | 
? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } | 
% {$_.item.serverItem -replace $sourcePath,$destPath} | Add-TfsPendingChange -delete 
2

아니요, 죄송합니다. 기본이없는 병합은 "폴더의 내용을 가져 와서 다른 곳으로 복사하는 것"보다 조금 벙벙합니다. 근거없는 이름에서 알 수 있듯이 diff를 수행 할 역사적인 정보는 없습니다. 실제로 이것은 파일 내용이 전파되지만 네임 스페이스 변경 (삭제, 삭제 취소, 이름 바꾸기)이 아니라는 것을 의미합니다. 유사한 파일 이름을 매칭하고 손가락을 교차시켜 파일 내용을 비교할 수는 있지만, 네임 스페이스를 비교할 때 트리 구조가 마지막으로 동기화 된 것처럼 보이는 트리 구조가 무엇인지 알 필요가 있으므로 TFS는 신경 쓰지 않습니다.

그런데 원하는 삭제가 이루어진 곳의 변경 집합 #을 알고 있다면 삭제 자체를 스크립팅하는 것이 중요하지 않습니다.

$tfs = Get-TfsServer -path . -all 
$deletes = get-tfschangeset 94 | % { $_.changes } | ? { ($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } | % { $_.serveritem } 
($deletes -replace "$/branch1" "$/branch2") | Add-TfsPendingChange -delete 

는 [검증되지 않은 있지만 작동합니다] 내가 여기에 약간의 실험과

+1

당신은 (는 전화 또는 절 또는 무엇이든) 바꾸기 명령에 쉼표를 잊어 버렸습니다. 나는 아직도 그것을 디버깅하는 중이다. –

+0

고맙습니다. 언제든지 내 게시물을 편집 할 수 있습니다. –

+0

리차드, 저는 그 점에 대해 명성이 없습니다. 나는 그것에 노력하고있다. –

관련 문제