2010-01-28 38 views
7

Sử dụng Visual Studio công cụ 2008,Giải thích tf diff

tôi đang cố gắng để có được một diff ASCII của sự thay đổi bộ 14.318 và 14317.

tôi có thể làm như vậy bằng GUI:

tf changeset 14318 

và sau đó chọn tệp và nhấp chuột phải và chọn so sánh với phiên bản trước đó. Tuy nhiên, đây là một chút tẻ nhạt và nó là dựa trên GUI. Nhiệm vụ của tôi trong tay là quay lại nhiều thay đổi vào một nhánh khác. Tôi muốn tự động hóa thử nghiệm (nói sử dụng Python), đảm bảo rằng tôi đã thực hiện nó một cách chính xác. Vâng, với mục đích giáo dục, tôi sẽ thực hiện tất cả các thay đổi bằng tay mà không cần nhìn vào giải pháp, và sau đó tôi sẽ so sánh hai thay đổi và cố gắng tìm bất kỳ sự khác biệt nào. Đây là những gì tôi yêu thích về tf - Tôi có thể nhập:

tf changeset 14318 > out.txt&&notepad out.txt 

để xem chi tiết về tệp nào bị ảnh hưởng.

Tương tự, tôi muốn nhận được tệp out.txt với tất cả các khác biệt được lưu trong đó. Tôi khá chắc chắn rằng tôi có thể xử lý phần Python. Tôi chắc chắn muốn biết làm thế nào để làm điều đó bằng cách sử dụng công cụ tf.exe, nhưng nếu bạn cũng đã xảy ra để biết thủ thuật khác để hoàn thành điều này (một số công cụ bên thứ 3 mát mẻ, hoặc kịch bản PowerShell, sau đó xin vui lòng cho tôi biết là tốt).

Cảm ơn bạn!

Oh, bằng cách này, tôi đã kiểm tra này: http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

Và tôi đã cố gắng này:

tf diff 14318 14317 

Và tôi đã nhận lỗi này: File (hoặc thư mục) c: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ 14318 không tồn tại.

Bây giờ cảm ơn bạn.

EDIT: Có công cụ nào có thể làm được điều này không?

+0

Tại sao bạn nói "Tôi có thể làm như vậy bằng cách sử dụng GUI: tf changeset 14318" ?? tf.exe là dòng lệnh, không phải GUI. – pabrams

Trả lời

17

Bạn chỉ không sử dụng đúng cú pháp khi gọi nó. Trong trường hợp này, nó đã cố gắng làm một sự khác biệt giữa bản sao làm việc của bạn và phiên bản kho cơ sở của các tệp (không tồn tại) 1431814317.

Những gì bạn cần làm là thay vì sử dụng một loạt changeset trong /version, như thế này:

tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff 

Lưu ý rằng bạn có thể sử dụng bất kỳ thông số kỹ thuật ~ với phiên bản khác - nhãn, ngày vv Xem here để biết chi tiết .

+0

Xin cảm ơn! Và làm thế nào tôi sẽ làm một khác biệt trên phiên bản hiện tại (địa phương) và mới nhất, hoặc chưa sửa đổi? Cảm ơn nhiều! –

+0

Nếu bạn không chỉ định phạm vi, nhưng chỉ là một phiên bản, thì phiên bản cục bộ của bạn sẽ được so sánh với phiên bản bạn đã chỉ định - tức là'/ phiên bản: C1000' so sánh phiên bản địa phương với phiên bản sau khi thay đổi 1000. Phiên bản mới nhất có thể được chỉ định bởi'/phiên bản: T'. Phiên bản cơ sở cho phiên bản địa phương của bạn là '/ phiên bản: W' (lưu ý rằng tất cả những cái này cũng có thể sử dụng được trong phạm vi, vì vậy'/phiên bản: C1000 ~ T' là hoàn toàn hợp lệ). Đồng thời, bạn có thể sử dụng đường dẫn tệp cục bộ thay vì đường dẫn máy chủ TFS. –

+0

Tôi nghĩ rằng điều này thực hiện chính xác những gì tôi muốn! Tại sao mọi người không bình chọn câu trả lời của bạn? –

1

Đây là một PowerShell (V2) kịch bản, kéo dài từ câu trả lời Pavel, đây sẽ là performant hơn, bởi vì chúng ta tìm thấy các tập tin đã thay đổi, sau đó nhận được tf để diff chúng riêng lẻ:

Write-Host "Checking if TFS snap-in has been added..." -ForegroundColor green 

# Find all TFS snapins. 
$snapins = Get-PSSnapin -Registered | Where-Object { $_.Name -like "*TeamFoundation*" } 

foreach($snapin in $snapins) 
{ 
    # Add snapin if not already added. 
    $exists = Get-PSSnapin | Where-Object { $_.Name -eq $snapin.Name } 
    if (!$exists) 
    { 
     Write-Host "Adding Snapin " $snapin.Name -ForegroundColor green 
     Add-PSSnapin $snapin.Name 
    } 
    else 
    { 
     Write-Host "Snapin already added." -ForegroundColor green 
    } 
} 



# Get TFS Server object reference. 
$tfs_server = Get-TfsServer -Name $/<serverName>/<RepoDir> 

# Get list of changed files 
$changes_from_changeset = Get-TfsChangeset -ChangesetNumber 829 | Select -Expand Changes | % { $_.Item.ServerItem } 
#$changes_from_changeset 

foreach($change in $changes_from_changeset) 
{ 
    &"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" diff $change /version:829~T /format:unified 
} 
+0

Cảm ơn, các điều kiện tiên quyết nếu có để chạy điều này là gì? –

+0

Bạn sẽ cần phải cài đặt các công cụ TFS Power để sử dụng TF.exe và cài đặt PowerShell phiên bản 2.0. Các công cụ Power sẽ bao gồm một snapshot PowerShell, được sử dụng ở đầu của kịch bản. – Russell

+0

Điểm bắt đầu tuyệt vời, mặc dù nếu có ai cố gắng sao chép điều này trên máy x64, hãy đảm bảo thay đổi "C: \ Program Files \" thành "C: \ Program Files (x86) \". Ngoài ra, điều này cần phải được thực hiện trong một thư mục được ánh xạ để Get-TfsChangeset có thể tìm thấy máy chủ ($ tfs_server không bao giờ được sử dụng). Cuối cùng, nếu bạn muốn biết sự khác biệt giữa hai phiên bản, nó không đủ để phân biệt tất cả các tệp có trong changeset đầu tiên. Các thay đổi bên ngoài các tệp này có thể ảnh hưởng đến chúng. Bạn sẽ muốn bao gồm tất cả các tệp đã thay đổi giữa phiên bản đầu tiên và phiên bản thứ hai, có thể bị hạn chế đối với một thư mục cụ thể. – SvenS