TFS: Bagaimana Anda dapat Membatalkan Checkout dari file yang tidak dimodifikasi dalam file batch

172

Kami menggunakan file batch untuk menghasilkan kode, dan secara otomatis memeriksa file yang dihasilkan dari Team Foundation Server (TFS) sehingga dapat dibuat ulang. Sebagian besar file-file ini tidak dimodifikasi, tetapi generator tidak mengetahui ini sebelumnya.

Perintah "tfs undo" membatalkan checkout, tetapi meminta jika beberapa telah dimodifikasi (yang kami tidak ingin lakukan). Kami juga tidak ingin memeriksa file yang dihasilkan segera.

Apakah ada perintah (atau serangkaian perintah) untuk membatalkan checkout semua file yang tidak dimodifikasi tanpa meminta pengguna?

Robert Wagner
sumber
Perhatikan bahwa secara manual membatalkan semua perubahan dengan harapan memilih "Tidak untuk semua" ketika diminta tentang file yang telah diubah tidak akan berfungsi dengan benar, karena akan membatalkan ADDperubahan tanpa diminta (lihat jawaban Ray ).
Elaskanator

Jawaban:

202

Lihatlah perintah Undo Unchanged dari Power Tools Team Foundation Server Agustus 2011

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

Terima kasih Matt Florence untuk pembaruan tautan.

Terima kasih Ray Vega untuk sintaks yang sebenarnya .

Mike Chaliy
sumber
1
Ini harus diedit / digabung untuk memuat informasi penggunaan sebagai bagian dari konten jawaban.
mcw
4
Anda benar-benar ingin membaca posting ini: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock
17
hmm, sesuatu yang hampir setiap orang lakukan beberapa kali sehari: "Mari kita letakkan di installer terpisah bernama Power Tools" ... sigh
vidstige
1
@ Mike Chaliy Anda akan berpikir. Saya mencoba TFS sekarang, dan sedang mencari cara untuk melakukan ini dan berakhir di sini.
vidstige
3
Tidak berfungsi jika perubahan Anda digabungkan. Tampaknya Anda selalu menganggap penggabungan sebagai perubahan nyata, bahkan jika tidak ada perubahan file, dan tidak ada opsi untuk membalik perilaku itu. Tidak apa-apa sebagai perilaku default, tetapi terkadang itu bukan yang Anda inginkan.
user1164178
124

Instal Team Foundation Server Power Tools dan jalankan yang berikut dari baris perintah menggunakan tfpt.exe di root direktori ruang kerja proyek Anda:

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

Termasuk /nogetsangat dianjurkan karena mencegah 'mendapatkan terbaru' semua file proyek Anda yang tergantung pada jumlah total dapat memakan waktu yang sangat lama.

sinar
sumber
12
Ini harus menjadi jawaban yang diterima, ia memiliki semua detail yang relevan (sebagaimana dibuktikan oleh skor yang lebih tinggi).
rikoe
7
Keren. Juga, mengapa tidak menambahkan ini sebagai 'Alat Eksternal' permanen ke Visual Studio. Mengambil ini sebagai contoh: blog.kurtschindler.net/post/… Perintah: [dir instalasi Anda] \ TFPT.EXE Argumen: uu. / noget / rekursif Direktori awal: $ (SolutionDir)
rohancragg
12
Pertanyaannya menentukan melakukan operasi ini tanpa prompt , tetapi tidak ada jawaban yang tampaknya mengatasi ini. Jika Anda membutuhkan ini, tambahan / noprompt adalah opsi yang Anda cari. Dokumentasi PowerTools tidak ada! Ini daftar opsi ini untuk beberapa perintah, tetapi tidak yang ini (UU). Awas!
Johnny Kauffman
1
@ user20358 baik cdke tempat direktori ruang kerja Anda (misalnya, milik saya c:\myProject) atau secara eksplisit memasukkannya setelah itu uu(mengganti periode .dengan itu)
Ray
Apakah ini memiliki saklar gaya, seperti / Y atau / paksa? Saya selalu ditanya apakah benar-benar ingin membatalkannya, dan saya ingin yang otomatis. Letakkan / Y di sana, tetapi memberi tahu saya The Option Y membutuhkan nilai.
Squirrelkiller
118

@Mike & @ray terima kasih,

Saya ingin membuatnya lebih mudah.

Di VS, di menu Alat, klik "Alat Eksternal".

Alat Eksternal

Klik Tambah.

Masukkan judul.

Perintah: tfpt.exe

Argumen: uu. / noget / rekursif

Direktori Awal: [Anda dapat memilih dari tombol panah].

Batalkan solusi yang tidak berubah

Batalkan tidak berubah dalam proyek

Dua perintah baru ditambahkan ke menu Tools.

Gunakan saat dibutuhkan.

Nikmati,

Ofir

Ofir
sumber
3
Sangat keren. Anda dapat melangkah lebih jauh juga dan menambahkan pintasan. Perhatikan seberapa jauh perintah Anda yang ditambahkan (mis. Mungkin keempat). Lalu ke ke Tools -> Options -> Environment -> Keyboard -> dan ketik 'Tampilkan perintah yang mengandung' kotak teks "Tools.External" dan tetapkan pintasan. Sebagai contoh saya memilih Tools.ExternalCommand4 karena saya baru saja membatalkan perintah adalah yang keempat turun. Saya kemudian menetapkan tombol pintas Ctrl + Alt + U, Ctrl + Alt + U
Mario
1
Bisakah kita memiliki versi terbaru dari ini? Jika ditemukan tf.exe tapi apa perintah uu? itu memberi tahu saya perintah Tidak Dikenali: uu. Terima kasih atas bantuan
Shay
1
@Shay: Bekerja untuk saya di VS2015 dengan alat-alat listrik TFS terinstal.
Igor Malin
27
  1. Klik kanan pada proyek Anda
  2. Pilih batalkan checkout, lalu klik oke, atau konfirmasi apa pun yang tersisa ...
  3. Kemudian, saat membatalkan checkout, untuk setiap file yang memiliki perubahan NYATA di dalamnya, sebuah prompt akan meminta Anda untuk mengonfirmasi check out untuk file itu ... cukup klik "Tidak untuk Semua"

Visual studio akan tahu jika file yang diperiksa memiliki perubahan atau tidak ada.

PERINGATAN: Metode ini juga menghapus file baru , yaitu file yang belum masuk ke TFS. Jika Anda ingin menyimpan file-file ini maka cukup kecualikan mereka dari set file yang Anda "batalkan".

Ray Lionfang
sumber
14
Be aware that this method also removes added files that are not yet checked in from TFS. ... Ya, itu adalah diskualifikasi yang cukup cepat.
shortstuffsushi
1
Ini berfungsi untuk menggabungkan cabang Baseless saya . Terima kasih. Biasanya dalam hal ini VS ditandai Semua file dalam solusi berubah.
KoViMa
2
ini adalah neraka ketika nuget melakukan checkout untuk 10.000 file yang tidak perlu diperbarui.
Ievgen Naida
13

Diperbarui pertanyaan ini dengan jawaban ketika bekerja dengan TFS2017 dan VS2017 / VS2019 saja.

Alat-alat listrik tidak ada untuk TFS 2017 dan yang lama tidak dapat bekerja dengan baik bersama dengan itu, tetapi tampaknya sebagian besar fungsi telah dipindahkan ke VS2017 itu sendiri atau plugin (lihat di bawah).

Visual Studio 2017/2019 Extension

Beberapa tindakan seperti membatalkan file yang tidak berubah telah dipindahkan ke

ekstensi untuk VS2017

ekstensi untuk VS2019

Lokasi tombol "Batalkan Tidak Berubah":

batalkan lokasi tombol tidak berubah

Bug yang dikenal

Anda harus membuka 'Source Control Explorer' (dan biarkan terbuka) sehingga 'Undo Unchanged' ditampilkan di menu Tindakan pada tampilan Pending Changes. dilaporkan di sini .

Ekstensi Integrasi Windows Shell

Selain itu, Anda masih dapat mengatur integrasi shell Windows melalui installer yang terpisah yang tidak lagi ditautkan ke TFS Power Tools.

Integrasi shell windows tidak bekerja persis sama dengan powertools sebelumnya, tetapi tindakan paling penting berhasil bagi saya.

Schwarzie2478
sumber
Saya perhatikan dalam pertanyaan, bahwa mereka ingin
menuliskannya
1
Saya tidak dapat menemukan opsi "Undo Unchanged" di VS2017 setelah menginstal ekstensi yang ditautkan. Apakah saya melewatkan sesuatu?
Erzékiel
Saya belum sering menggunakannya. Ketika saya menggunakannya untuk mengujinya untuk pelanggan saya, saya harus mengklik sedikit di Team Explorer dan memastikan bahwa ada perubahan untuk membatalkan. Mungkin saja itu hanya muncul ketika Anda hanya memiliki perubahan yang menunggu untuk antrian untuk komitmen bahwa opsi ini muncul. (atau hanya satu perubahan cabang saja) ...
Schwarzie2478
2
@ Erzékiel Pilihan hanya muncul ketika Solution Explorer terbuka dan siap.
MatrixRonny
1
Ekstensi ini bekerja kadang-kadang dan kehadirannya adalah terkait dengan memiliki TFS Sumber Control Explorer terbuka dan tidak Solution Explorer (karena beberapa keluar salah runcing) - tidak mencampur dua jendela kontrol yang berbeda. Namun; ketika saya mengatakan kadang-kadang, itu karena ia datang dan pergi. Saat ini saya tidak memilikinya, saya melakukannya sebulan yang lalu. Agak sedikit buggy dan saya khawatir ekstensi lain adalah pelakunya, seperti Resharper dan sejenisnya.
Christian
8

Jika Anda cukup memeriksa kembali semua file yang Anda periksa, TFS cukup pintar untuk mencari tahu mana yang berubah dan hanya memasukkannya dalam set perubahan yang direkam di server.

TFS melakukan ini dengan membandingkan hash MD5 dari isi file sebelum dan sesudah check-in.

Ini semua dengan asumsi bahwa proses pembuatan Anda murni memperbarui set file yang sama, yaitu Anda tidak akan pernah memiliki kasus di mana file yang dihasilkan pada generasi sebelumnya tidak diperlukan pada generasi berikutnya (yaitu Anda ingin menunda penghapusan untuk file itu) atau file tersebut berganti nama.

Jika proses Anda berpotensi membutuhkan penghapusan file, taruhan terbaik Anda mungkin dengan melihat perintah Power Tools Team Foundation ( tfpt ) dan menggunakan perintah online tfpt yang hanya akan memeriksa file yang telah berubah, dan akan cukup pintar untuk pend menghapus untuk semua file yang tidak lagi diperlukan atau diubah namanya dan ditambahkan pend.

Semoga berhasil,

Martin.

Martin Woodward
sumber
6
Terima kasih untuk itu, namun kami tidak ingin memeriksa file yang dimodifikasi pada saat itu. Yang dimodifikasi tidak boleh diperiksa sampai fitur selesai, tetapi yang tidak dimodifikasi harus dihapus sehingga dev dapat meninjau perubahan.
Robert Wagner
@RobertWagner Jika Anda memiliki bangunan yang terjaga keamanannya, maka Anda dapat membatalkan (jika tidak membatalkan deteksi file yang identik) ketika Anda mendapatkan peringatan popup bahwa perubahan harus dibuat terlebih dahulu.
Elaskanator
6

Berhati-hatilah bahwa TFS yang dibatalkan tidak akan mengembalikan kembali nilai "Tanggal Dimodifikasi" Sistem File. Ini sangat menyebalkan terutama jika Anda menggunakan alat seperti robocopy untuk menyinkronkan mesin jarak jauh. Bahkan setelah Anda membatalkan check out, jika Anda menyimpan file dengan demikian memperbarui nilai "Tanggal Dimodifikasi", nilai yang diperbarui akan bertahan bahkan setelah checkout dibatalkan.

Evermeire
sumber
1
Baik menggunakan robocopy atau VCS, menggunakan campuran selalu akan memberikan inkonsistensi. Jauh lebih baik untuk mengisi setiap mesin dari VCS secara langsung.
Richard
4

Ada beberapa poin mengenai opsi uu untuk tfpt (disarankan di sebagian besar jawaban lain) yang tidak jelas bagi saya pada awalnya. Pertama, ini adalah bantuan baris perintah yang dapat diakses dengan perintahtfpt uu /?

Membatalkan perubahan menunggu yang berlebihan. Jika keadaan item dengan perubahan yang tertunda sama dengan di server, maka perubahan tersebut dibatalkan.

Penggunaan: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [filespec ...]

  • / changeset Bandingkan ruang kerja dengan status item pada versi changeset yang ditentukan, bukan versi terbaru
  • filespec ... Hanya periksa filespec yang terdaftar untuk perubahan yang berlebihan
  • / rekursif Periksa spesifik file yang ditentukan dengan rekursi penuh
  • / noget Jangan lari dapatkan sebelum memeriksa

Opsi / changeset tidak dapat digunakan dengan filespecs atau / rekursif.

Sekarang izinkan saya memecah perintah yang direkomendasikan di jawaban lain.

tfpt uu . /noget /recursive
  • tfpt uu menetapkan bahwa kami ingin menggunakan perintah 'Batalkan Tidak Berubah'.
  • . menunjukkan (saya kira) bahwa direktori kerja saat ini harus digunakan sebagai filespec.
  • /noget memastikan bahwa 'dapatkan versi terbaru' tidak dipanggil sebelum membatalkan file yang tidak diubah.
  • /recursivememastikan bahwa bukan hanya filespec yang akan dipertimbangkan tetapi semua folder dan file anak rekursif. Ini tampaknya tergantung pada filespec - jika tidak ada yang disediakan maka seluruh ruang kerja diproses.

Jadi ada beberapa hal yang perlu diperhatikan di sini mengenai perintah dari atas ...

  • Itu tergantung pada direktori kerja.
  • Itu tidak memproses seluruh ruang kerja.

Saya telah menemukan bahwa perintah berikut ini berfungsi paling baik untuk saya - ini akan memproses seluruh ruang kerja.

tfpt uu /noget

Perhatikan bahwa masih tergantung pada direktori kerja di tfpt menggunakannya untuk menentukan ruang kerja mana yang harus diproses. Tetapi selama Anda memberikan path ke file atau folder di dalam ruang kerja, Anda baik untuk pergi.

Scott Munro
sumber
3

Saya bisa melihat pendekatan Ray LionFang di atas. Tidak dapat berkomentar di sana karena saya tidak memiliki perwakilan. Meskipun saya suka pendekatan ini karena tidak ada perubahan yang diperlukan untuk Alat dll ........

  1. Klik kanan pada proyek Anda
  2. pilih batalkan checkout, lalu klik oke, atau konfirmasi apa pun yang tersisa ...
  3. kemudian, saat membatalkan checkout, untuk setiap file yang memiliki perubahan NYATA di dalamnya, sebuah prompt akan meminta Anda untuk mengonfirmasi check out untuk file itu ... cukup klik "Tidak untuk Semua"
  4. Visual studio akan tahu jika file yang diperiksa memiliki perubahan atau tidak ada. Ketahuilah bahwa metode ini juga menghapus file tambahan yang belum masuk dari TFS ...

....... ada masalah dengan pendekatan itu dalam memukul "Tidak Untuk Semua" mempertahankan beberapa file yang tidak dimodifikasi. Tampaknya melakukan sesuatu seperti Membatalkan file yang tidak dimodifikasi hingga menyentuh file pertama yang benar-benar dimodifikasi dan kemudian mengabaikan sisa file yang tidak dimodifikasi, jika itu masuk akal. Saya hanya melihat efek ini sesekali.

Solusi potensial untuk mengikuti proses di atas tetapi alih-alih menekan "Tidak Untuk Semua", tekan "Tidak" untuk setiap file. Karena ini bisa memakan waktu cukup lama tergantung pada jumlah file yang Anda kerjakan, apa yang biasanya saya lakukan adalah menekan "ALT + N", dan itu hanya mempercepat semua file sambil membatalkan SEMUA file yang tidak dimodifikasi.

Abu
sumber
mohon diperhatikan karena ini tidak dapat ditekankan cukup. File yang baru ditambahkan ke proyek juga dihapus dengan pendekatan ini. Ini disebutkan pada serveral dari jawaban lain juga.
Christian
-20

Sejauh yang saya mengerti, di TFS jika Anda checkout proyek tim, seluruh proyek diperiksa dan Anda tidak memiliki kendali atas file mana yang diturunkan. Jika Anda ingin mencegah checkin ke file tertentu, Anda dapat menguncinya.

Di tempat kerja, kita semua membenci TFS.

achinda99
sumber
1
Kita dapat memeriksa file individual, dan menguncinya tidak akan memungkinkan pengembang untuk memeriksanya.
Robert Wagner
5
Akan memilih, tapi "Di tempat kerja, kita semua membenci TFS." menyimpannya.
James