TFS: Làm thế nào bạn có thể hoàn tác Thanh toán các tệp chưa sửa đổi trong một tệp bó


172

Chúng tôi sử dụng một tệp bó để tạo mã và nó tự động kiểm tra các tệp được tạo từ Team Foundation Server (TFS) để nó có thể tạo lại chúng. Phần lớn các tệp này không được sửa đổi, nhưng trình tạo không biết điều này trước thời hạn.

Lệnh "tfs undo" hoàn tác thanh toán, nhưng sẽ nhắc nếu một số đã được sửa đổi (điều mà chúng tôi không muốn làm). Chúng tôi cũng không muốn kiểm tra các tệp được tạo ngay lập tức.

Có một lệnh (hoặc chuỗi lệnh) để hoàn tác kiểm tra tất cả các tệp chưa sửa đổi mà không nhắc nhở người dùng không?


Lưu ý rằng việc hoàn tác thủ công tất cả các thay đổi với mong muốn chọn "Không cho tất cả" khi được nhắc về các tệp đã thay đổi sẽ không hoạt động chính xác, vì nó sẽ hoàn tác các ADDthay đổi mà không cần nhắc (xem câu trả lời của Ray ).
Elaskanator

Câu trả lời:


202

Hãy xem lệnh Hoàn tác không thay đổi của Team Foundation Server Power Tools Tháng 8 năm 2011

c:\myProject> tfpt uu . /noget /recursive

Cảm ơn Matt Florence đã cập nhật liên kết.

Cảm ơn Ray Vega cho cú pháp thực tế .


1
Điều này nên được chỉnh sửa / hợp nhất để chứa thông tin sử dụng như là một phần của nội dung câu trả lời.
mcw

4
Bạn thực sự muốn đọc bài đăng này: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock

17
hmm, một số thứ mà hầu như mọi người đều thực hiện vài lần mỗi ngày: "Hãy đặt nó trong một trình cài đặt riêng gọi là Power Tools" ... thở dài
vidstige

1
@Mike Chaliy bạn sẽ nghĩ. Tôi đang thử TFS ngay bây giờ và đang tìm cách làm điều này và kết thúc tại đây.
vidstige

3
Nó không hoạt động nếu những thay đổi của bạn là hợp nhất. Dường như tfpt uu luôn coi việc hợp nhất là một thay đổi thực sự, ngay cả khi không có thay đổi tập tin và không có tùy chọn để lật lại hành vi đó. Đó là một hành vi mặc định, nhưng đôi khi nó không như bạn muốn.
user1164178

124

Cài đặt Team Foundation Server Power Tools và chạy phần sau từ dòng lệnh bằng tfpt.exe ở thư mục gốc của không gian làm việc của dự án của bạn:

c:\myProject> tfpt uu . /noget /recursive

Bao gồm /nogetrất được khuyến khích vì nó ngăn chặn 'bắt buộc' tất cả các tệp dự án của bạn, tùy thuộc vào tổng số có thể mất một thời gian rất dài.


12
Đây phải là câu trả lời được chấp nhận, nó có tất cả các chi tiết liên quan (được chứng minh bằng điểm số cao hơn).
rikoe

7
Mát mẻ. Ngoài ra, tại sao không thêm phần này dưới dạng 'Công cụ bên ngoài' vĩnh viễn vào Visual Studio. Lấy ví dụ này làm ví dụ: blog.kurtschindler.net/post/ Lệnh Lệnh: [thư mục cài đặt của bạn] \ TFPT.EXE Đối số: uu. / noget / đệ quy Thư mục ban đầu: $ (SolutionDir)
rohancragg

12
Câu hỏi chỉ định thực hiện thao tác này mà không có lời nhắc , nhưng không có câu trả lời nào có vẻ giải quyết vấn đề này. Nếu bạn cần điều này, bổ sung / noprompt là tùy chọn bạn đang tìm kiếm. Tài liệu PowerTools thiếu điều này! Nó liệt kê tùy chọn này cho một vài lệnh, nhưng không phải lệnh này (UU). Coi chừng!
Johnny Kauffman

1
@ user20353 hoặc là cdnơi thư mục không gian làm việc của bạn (ví dụ: của tôi c:\myProject) hoặc bao gồm rõ ràng nó sau uu(thay thế khoảng thời gian .với nó)
Ray

Cái này có công tắc lực, như / Y hay / lực không? Tôi luôn được hỏi liệu có thực sự muốn hoàn tác nó không, và tôi muốn tự động hóa nó. Đặt / Y ở đó, nhưng nó cho tôi biết Tùy chọn Y yêu cầu một giá trị.
Squirrelkiller

118

Cảm ơn bạn @mike & @ray,

Tôi muốn làm cho nó dễ dàng hơn.

Trong VS, tại menu Công cụ, nhấp vào "Công cụ bên ngoài".

Công cụ bên ngoài

Nhấp vào Thêm.

Nhập tiêu đề.

Lệnh: tfpt.exe

Luận điểm: uu. / noget / đệ quy

Thư mục ban đầu: [bạn có thể chọn từ nút mũi tên].

Hoàn tác không thay đổi trong giải pháp

Hoàn tác không thay đổi trong dự án

Hai lệnh mới được thêm vào menu Công cụ.

Sử dụng chúng khi cần thiết.

Thưởng thức,

Người thừa kế


3
Rất tuyệt. Bạn có thể đi thêm một bước nữa và thêm một phím tắt. Lưu ý rằng lệnh đã thêm của bạn xuống bao xa (ví dụ: nó có thể là lệnh thứ tư). Sau đó đến Công cụ -> Tùy chọn -> Môi trường -> Bàn phím -> và nhập vào 'Hiển thị các lệnh chứa' hộp văn bản "Công cụ.External" và gán phím tắt. Chẳng hạn, tôi đã chọn Tools.ExternalCommand4 vì lệnh hoàn tác mới được thêm vào của tôi là lệnh thứ tư trở xuống. Sau đó tôi đã gán các phím tắt Ctrl + Alt + U, Ctrl + Alt + U
Mario

1
Chúng tôi có thể có một phiên bản cập nhật của điều này? Nếu tìm thấy tf.exe nhưng lệnh uu là gì? nó cho tôi biết lệnh không được nhận dạng: uu. Cảm ơn sự giúp đỡ
Shay

1
@Shay: Hoạt động với tôi trong VS2015 với các công cụ nguồn TFS mới nhất được cài đặt.
Igor Malin

27
  1. Nhấp chuột phải vào dự án của bạn
  2. Chọn hoàn tác thanh toán, sau đó chỉ cần nhấp vào ổn, hoặc bất kỳ xác nhận nào còn lại ...
  3. Sau đó, trong khi hoàn tác kiểm tra, đối với mọi tệp có thay đổi THỰC SỰ trong đó, một lời nhắc sẽ yêu cầu bạn xác nhận kiểm tra cho tệp đó ... chỉ cần nhấp vào "Không cho tất cả"

Visual studio sẽ biết nếu tập tin kiểm tra có thay đổi hay không.

CẢNH BÁO: Phương pháp này cũng xóa các tệp mới , tức là các tệp chưa được kiểm tra trong TFS. Nếu bạn muốn giữ các tệp này thì chỉ cần loại trừ chúng khỏi bộ tệp bạn "hoàn tác".


14
Be aware that this method also removes added files that are not yet checked in from TFS.... vâng, đó là một người không đủ tiêu chuẩn ngay lập tức.
shortthingsushi

1
Nó hoạt động cho tôi hợp nhất các chi nhánh vô căn cứ . Cảm ơn. Thông thường trong trường hợp này, VS đánh dấu Tất cả các tệp trong giải pháp là đã thay đổi.
KoViMa

2
Đây là một địa ngục khi nuget thực hiện kiểm tra 10000 tệp không bắt buộc phải cập nhật.
Ievgen Naida

13

Đã cập nhật câu hỏi này với câu trả lời khi chỉ làm việc với TFS2017VS2017 / VS2019 .

Các công cụ mạnh mẽ không tồn tại cho TFS 2017 và các công cụ cũ không thể hoạt động tốt cùng với nó, nhưng rõ ràng hầu hết các chức năng đã được chuyển sang chính VS2017 hoặc các plugin (xem bên dưới).

Visual Studio 2017/2019 Gia hạn

Một số hành động như hoàn tác các tệp không thay đổi đã chuyển sang một

tiện ích mở rộng cho VS2017

tiện ích mở rộng cho VS2019

Vị trí nút "Hoàn tác không thay đổi":

hoàn tác vị trí nút không thay đổi

Lỗi đã biết

Bạn phải mở 'Trình điều khiển nguồn' (và để nó mở) để 'Hoàn tác không thay đổi' được hiển thị trong menu Hành động của chế độ xem Thay đổi đang chờ xử lý. báo cáo ở đây .

Mở rộng tích hợp Windows Shell

Ngoài ra, bạn vẫn có thể thiết lập tích hợp Windows shell thông qua một trình cài đặt riêng không còn được liên kết với TFS Power Tools.

Tích hợp shell windows không hoạt động chính xác như các bộ truyền động trước đây, nhưng các hành động quan trọng nhất đã làm việc với tôi.


Tôi nhận thấy trong câu hỏi, rằng họ muốn viết kịch bản, vì tôi không có giải pháp, tôi sợ
Schwarzie2478

1
Tôi không thể tìm thấy tùy chọn "Hoàn tác không thay đổi" trong VS2017 sau khi cài đặt tiện ích mở rộng được liên kết. Tôi đã bỏ lỡ một cái gì đó?
Erzékiel

Tôi đã không sử dụng nó rất nhiều. Khi tôi sử dụng nó để kiểm tra nó cho khách hàng của mình, tôi đã phải bấm một chút trong Team Explorer và đảm bảo rằng có những thay đổi để hoàn tác. Có thể nó chỉ xuất hiện khi bạn chỉ có các thay đổi đang chờ xử lý được xếp hàng cho một cam kết rằng tùy chọn này xuất hiện. (hoặc chỉ một chi nhánh thay đổi) ...
Schwarzie2478

2
@ Erzékiel Tùy chọn chỉ xuất hiện khi Solution Explorer mở và sẵn sàng.
MatrixRonny

1
Phần mở rộng này đôi khi hoạt động và sự hiện diện của nó được liên kết để mở TFS Source Control Explorer và không phải Solution Explorer (như một số chỉ ra sai) - không trộn lẫn hai cửa sổ điều khiển khác nhau. Tuy nhiên; khi tôi nói đôi khi, bởi vì nó đến và đi. Ngay bây giờ tôi không có nó, tôi đã làm một tháng trước. Đó là một lỗi nhỏ và tôi sợ các phần mở rộng khác là thủ phạm, chẳng hạn như Resharper và những thứ tương tự.
Christian

8

Nếu bạn chỉ cần kiểm tra lại tất cả các tệp mà bạn đã kiểm tra lại, TFS đủ thông minh để tìm ra những thay đổi nào và chỉ đưa chúng vào tập thay đổi được ghi trên máy chủ.

TFS thực hiện điều này bằng cách so sánh băm MD5 của nội dung tệp trước và sau khi đăng ký.

Đây là tất cả giả định rằng quá trình tạo thế hệ của bạn hoàn toàn cập nhật cùng một tập hợp các tệp, tức là bạn sẽ không bao giờ gặp trường hợp một tệp được tạo ở thế hệ trước không cần thiết trong thế hệ tiếp theo (nghĩa là bạn muốn xóa bỏ xóa cho tập tin đó) hoặc tập tin thay đổi tên.

Nếu quy trình của bạn có khả năng cần xóa các tệp, cách tốt nhất của bạn có thể là xem lệnh Team Foundation Power Tools ( tfpt ) và sử dụng lệnh tfpt trực tuyến sẽ chỉ kiểm tra các tệp đã thay đổi và sẽ đủ thông minh để Pend xóa cho bất kỳ tập tin không còn cần thiết hoặc thay đổi tên và Pend thêm.

Chúc may mắn,

Martin.


6
Cảm ơn vì điều đó, tuy nhiên chúng tôi không muốn kiểm tra các tệp đã sửa đổi tại thời điểm đó. Những cái đã sửa đổi không nên được kiểm tra cho đến khi tính năng được hoàn thành, nhưng những cái chưa sửa đổi sẽ bị xóa để nhà phát triển có thể xem lại các thay đổi.
Robert Wagner

@RobertWagner Nếu bạn có bản dựng có kiểm soát, thì bạn có thể hủy (nếu nó không hủy bỏ khi phát hiện tệp giống hệt nhau) khi bạn nhận được cảnh báo bật lên rằng các thay đổi phải được tạo trước tiên.
Elaskanator

6

Xin lưu ý rằng TFS hoàn tác sẽ không hoàn nguyên giá trị "Ngày sửa đổi" của Hệ thống tệp. Điều này rất khó chịu đặc biệt là nếu bạn sử dụng các công cụ như robocopy để đồng bộ hóa các máy từ xa. Ngay cả sau khi bạn hoàn tác kiểm tra, nếu bạn đã lưu tệp do đó cập nhật giá trị "Ngày đã sửa đổi", giá trị cập nhật đó sẽ vẫn tồn tại ngay cả sau khi hoàn tác thanh toán.


1
Hoặc sử dụng robocopy hoặc VCS, sử dụng hỗn hợp sẽ luôn tạo ra sự không nhất quán. Tốt hơn nhiều sẽ là nhập trực tiếp từng máy từ VCS.
Richard

4

Có một vài điểm liên quan đến tùy chọn uu cho tfpt (được đề xuất trong hầu hết các câu trả lời khác) lúc đầu tôi không rõ ràng. Thứ nhất, đây là trợ giúp dòng lệnh có thể được truy cập bằng lệnhtfpt uu /?

Hoàn tác các thay đổi đang chờ xử lý. Nếu trạng thái của một mục có thay đổi đang chờ xử lý giống như trên máy chủ, thì thay đổi đó sẽ được hoàn tác.

Cách sử dụng: tfpt uu [/ thay đổi: thay đổi] [/ đệ quy] [/ noget] [filespec ...]

  • / thay đổi So sánh không gian làm việc với trạng thái mục tại phiên bản thay đổi được chỉ định thay vì phiên bản mới nhất
  • filespec ... Chỉ kiểm tra các tập tin được liệt kê để thay đổi dự phòng
  • / đệ quy Kiểm tra các tệp tin được chỉ định với đệ quy đầy đủ
  • / noget Đừng chạy get trước khi kiểm tra

Tùy chọn / thay đổi có thể không được sử dụng với filespecs hoặc / đệ quy.

Bây giờ hãy để tôi chia nhỏ lệnh được khuyến nghị trong các câu trả lời khác.

tfpt uu . /noget /recursive
  • tfpt uu chỉ định rằng chúng tôi muốn sử dụng lệnh 'Hoàn tác không thay đổi'.
  • . cho biết (tôi đoán) rằng thư mục làm việc hiện tại nên được sử dụng như filespec.
  • /noget đảm bảo rằng 'nhận phiên bản mới nhất' không được gọi trước khi hoàn tác các tệp không thay đổi.
  • /recursiveđảm bảo rằng không chỉ các tập tin sẽ được xem xét mà tất cả các thư mục và tệp con đệ quy. Điều này dường như phụ thuộc vào filespec - nếu không được cung cấp thì toàn bộ không gian làm việc được xử lý.

Vì vậy, có một vài điều cần lưu ý ở đây liên quan đến lệnh từ phía trên ...

  • Nó phụ thuộc vào thư mục làm việc.
  • Nó không xử lý toàn bộ không gian làm việc.

Tôi đã thấy rằng lệnh sau hoạt động tốt nhất với tôi - nó sẽ xử lý toàn bộ không gian làm việc.

tfpt uu /noget

Lưu ý rằng nó vẫn phụ thuộc vào thư mục làm việc trong đó tfpt sử dụng nó để xác định không gian làm việc nào sẽ được xử lý. Nhưng miễn là bạn cung cấp một đường dẫn đến một tệp hoặc thư mục trong không gian làm việc, bạn sẽ ổn.


3

Tôi có thể thấy cách tiếp cận của Ray LionFang ở trên. Không thể nhận xét ở đó vì tôi không có đại diện. Mặc dù tôi thích cách tiếp cận này vì không có thay đổi nào đối với Công cụ, v.v.

  1. Nhấp chuột phải vào dự án của bạn
  2. chọn hoàn tác thanh toán, sau đó chỉ cần nhấp vào ổn, hoặc bất kỳ xác nhận nào còn lại ...
  3. sau đó, trong khi hoàn tác kiểm tra, đối với mọi tệp có thay đổi THỰC SỰ trong đó, một lời nhắc sẽ yêu cầu bạn xác nhận kiểm tra cho tệp đó ... chỉ cần nhấp vào "Không cho tất cả"
  4. Visual studio sẽ biết nếu tập tin kiểm tra có thay đổi hay không. Xin lưu ý rằng phương pháp này cũng xóa các tệp đã thêm chưa được kiểm tra từ TFS ...

....... có một vấn đề với cách tiếp cận đó trong việc nhấn "Không cho tất cả" giữ lại một vài tệp không được sửa đổi. Nó dường như làm một cái gì đó giống như Hoàn tác các tệp chưa sửa đổi cho đến khi nó chạm vào tệp đầu tiên thực sự được sửa đổi và sau đó bỏ qua phần còn lại của các tệp chưa sửa đổi, nếu điều đó có ý nghĩa. Thỉnh thoảng tôi mới thấy hiệu ứng này.

Một cách giải quyết tiềm năng là tuân theo quy trình trên nhưng thay vì nhấn "Không cho tất cả", hãy nhấn "Không" cho mỗi tệp. Vì việc này có thể mất một chút thời gian tùy thuộc vào số lượng tệp bạn đang làm việc, điều tôi thường làm là giữ "ALT + N" và nó chỉ tăng tốc qua tất cả các tệp trong khi hoàn tác TẤT CẢ các tệp chưa sửa đổi.


xin được thông báo vì điều này không thể được nhấn mạnh đủ. Các tệp mới được thêm vào dự án cũng được loại bỏ bằng phương pháp này. Điều này được đề cập trên máy chủ của các câu trả lời khác là tốt.
Christian

-20

Theo như tôi hiểu, trong TFS nếu bạn kiểm tra một dự án nhóm, toàn bộ dự án sẽ được kiểm tra và bạn không có quyền kiểm soát những tập tin nào được đưa xuống. Nếu bạn muốn ngăn chặn đăng nhập vào một số tệp nhất định, bạn có thể khóa chúng.

Trong công việc, tất cả chúng ta đều ghét TFS.


1
Chúng tôi có thể kiểm tra các tệp riêng lẻ và việc khóa nó sẽ không cho phép nhà phát triển kiểm tra chúng.
Robert Wagner

5
Sẽ bỏ phiếu, nhưng "Tại nơi làm việc, tất cả chúng ta đều ghét TFS." đã lưu nó
James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.