TFS: Jak można cofnąć wypisanie niezmodyfikowanych plików w pliku wsadowym


172

Używamy pliku wsadowego do generowania kodu i automatycznie pobiera wygenerowane pliki z Team Foundation Server (TFS), aby mógł je ponownie wygenerować. Większość tych plików nie jest modyfikowana, ale generator nie wie o tym z wyprzedzeniem.

Polecenie „tfs undo” cofa wyewidencjonowanie, ale pyta, czy niektóre z nich zostały zmodyfikowane (czego nie chcemy robić). Nie chcemy też od razu rejestrować wygenerowanych plików.

Czy istnieje polecenie (lub seria poleceń), aby cofnąć pobranie wszystkich niezmodyfikowanych plików bez monitowania użytkownika?


Zwróć uwagę, że ręczne cofnięcie wszystkich zmian z oczekiwaniem wybrania „Nie dla wszystkich” po wyświetleniu monitu o pliki, które uległy zmianie, nie będzie działać poprawnie, ponieważ cofnie ADDzmiany bez pytania (zobacz odpowiedź Ray ).
Elaskanator

Odpowiedzi:


202

Przyjrzyj się poleceniu Undo Unchanged w Team Foundation Server Power Tools z sierpnia 2011

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

Dzięki Matt Florence za aktualizację linków.

Dzięki Ray Vega za aktualną składnię .


1
Powinno to zostać zredagowane / połączone, aby zawierało informacje o użytkowaniu jako część treści odpowiedzi.
mcw

4
Naprawdę chcesz przeczytać ten post: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Byron Whitlock

17
hmm, coś, co prawie każdy robi kilka razy dziennie: "
Umieśćmy

1
@Mike Chaliy można by pomyśleć. Wypróbowuję teraz TFS i szukałem, jak to zrobić, i wylądowałem tutaj.
vidstige

3
To nie działa, jeśli twoje zmiany są scalane. Wygląda na to, że tfpt uu zawsze uważa scalanie za prawdziwą zmianę, nawet jeśli nie ma zmiany pliku i nie ma opcji odwrócenia tego zachowania. Jest to w porządku jako domyślne zachowanie, ale czasami nie jest to, czego chcesz.
user1164178

124

Zainstaluj Team Foundation Server Power Tools i uruchom następujące polecenia z wiersza polecenia za pomocą tfpt.exe w katalogu głównym obszaru roboczego projektu:

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

Dołączanie /nogetjest wysoce zalecane, ponieważ zapobiega wymuszonemu „pobierz najnowsze” wszystkich plików projektu, co w zależności od całkowitej liczby może zająć bardzo dużo czasu.


12
Powinna to być akceptowana odpowiedź, zawiera wszystkie istotne szczegóły (o czym świadczy wyższy wynik).
rikoe

7
Chłodny. Dlaczego nie dodać tego jako stałego „narzędzia zewnętrznego” do programu Visual Studio. Biorąc to jako przykład: blog.kurtschindler.net/post/ ... Polecenie: [ katalog twojej instalacji] \ TFPT.EXE Argumenty: uu. / noget / recursive Katalog początkowy: $ (SolutionDir)
rohancragg

12
Pytanie określa wykonanie tej operacji bez monitu , ale żadna z odpowiedzi nie wydaje się rozwiązać tego problemu. Jeśli tego potrzebujesz, dodatkowy / noprompt jest opcją, której szukasz. Brakuje tego w dokumentacji PowerTools! Wymienia tę opcję dla kilku poleceń, ale nie dla tej (UU). Strzec się!
Johnny Kauffman

1
@ user20358 albo cddo miejsca, w którym znajduje się twój katalog obszaru roboczego (na przykład mój c:\myProject), albo jawnie dołącz go po uu(zastępując nim kropkę .)
Ray

Czy ma przełącznik siły, taki jak / Y lub / force? Zawsze jestem pytany, czy naprawdę chcę to cofnąć i chciałbym, aby to było zautomatyzowane. Umieść / Y tam, ale mówi mi, że Opcja Y wymaga wartości.
Squirrelkiller

118

Dziękuję @mike & @ray,

Chcę to ułatwić.

W VS, w menu Narzędzia, kliknij „Narzędzia zewnętrzne”.

Narzędzia zewnętrzne

Kliknij Dodaj.

Wpisz tytuł.

Polecenie: tfpt.exe

Argumenty: uu. / noget / recursive

Katalog początkowy: [można wybrać przycisk ze strzałką].

Cofnij niezmienione w rozwiązaniu

Cofnij bez zmian w projekcie

Do menu Narzędzia dodano dwa nowe polecenia.

Używaj ich w razie potrzeby.

Cieszyć się,

Ofir


3
Bardzo fajny. Możesz też pójść o krok dalej i dodać skrót. Zwróć uwagę, jak daleko jest dodane polecenie (np. Może to być czwarta). Następnie przejdź do Narzędzia -> Opcje -> Środowisko -> Klawiatura -> i wpisz w polu tekstowym „Pokaż polecenia zawierające” „Narzędzia.Zewnętrzne” i przypisz skrót. Na przykład wybrałem Tools.ExternalCommand4, ponieważ moja nowo dodana komenda cofania była czwartą w dół. Następnie przypisałem klawisze skrótu Ctrl + Alt + U, Ctrl + Alt + U
Mario

1
Czy moglibyśmy prosić o zaktualizowaną wersję tego? Jeśli zostanie znaleziony plik tf.exe, ale jakie jest polecenie uu? mówi mi Nierozpoznane polecenie: uu. Dzięki za pomoc
Shay

1
@Shay: Działa dla mnie w VS2015 z zainstalowanymi najnowszymi elektronarzędziami TFS.
Igor Malin

27
  1. Kliknij prawym przyciskiem myszy swój projekt
  2. Wybierz cofnij płatność, a następnie kliknij OK lub jakiekolwiek potwierdzenie pozostało ...
  3. Następnie, podczas cofania wypisania, dla każdego pliku, który zawiera PRAWDZIWE zmiany, pojawi się monit o potwierdzenie wyewidencjonowania tego pliku ... po prostu kliknij „Nie dla wszystkich”

Program Visual Studio będzie wiedział, czy wyewidencjonowany plik ma zmiany, czy nie.

OSTRZEŻENIE: Ta metoda usuwa również nowe pliki, tj. Pliki, które nie zostały jeszcze wpisane do TFS. Jeśli chcesz zachować te pliki, po prostu wyklucz je z zestawu plików, które „cofniesz”.


14
Be aware that this method also removes added files that are not yet checked in from TFS.... tak, to całkiem natychmiastowy dyskwalifikacja.
shortstuffsushi

1
To działa dla mojego Baseless gałęzie łączą się. Dzięki. Zwykle w tym przypadku VS oznaczył wszystkie pliki w rozwiązaniu jako zmienione.
KoViMa

2
to jest piekło, gdy nuget wyewidencjonowuje 10000 plików, które nie muszą być aktualizowane.
Ievgen Naida

13

Zaktualizowano to pytanie o odpowiedź podczas pracy tylko z TFS2017 i VS2017 / VS2019 .

Elektronarzędzia nie istnieją dla TFS 2017, a stare nie mogą dobrze współpracować z nim, ale najwyraźniej większość funkcji została przeniesiona do samego VS2017 lub wtyczek (patrz poniżej).

Rozszerzenie programu Visual Studio 2017/2019

Niektóre działania, takie jak cofanie niezmienionych plików, zostały przeniesione do pliku

rozszerzenie dla VS2017

rozszerzenie dla VS2019

Lokalizacja przycisku „Cofnij niezmienione”:

cofnij niezmienioną lokalizację przycisku

Znany błąd

Musisz otworzyć „Eksplorator kontroli źródła” (i pozostawić go otwartego), aby „Cofnij niezmienione” było wyświetlane w menu Akcja widoku Oczekujące zmiany. zgłoszony tutaj .

Rozszerzenie integracji z powłoką systemu Windows

Ponadto nadal można skonfigurować integrację powłoki systemu Windows za pomocą osobnego instalatora który nie jest już powiązany z TFS Power Tools.

Integracja powłoki systemu Windows nie działa dokładnie tak samo, jak poprzednie elektronarzędzia, ale najważniejsze czynności zadziałały dla mnie.


Zauważyłem w pytaniu, że chcą to napisać, bo na to nie mam rozwiązania, obawiam się
Schwarzie2478

1
Nie mogę znaleźć opcji „Cofnij niezmienione” w VS2017 po zainstalowaniu połączonego rozszerzenia. Przegapiłem coś ?
Erzékiel

Nie używałem go zbyt często. Kiedy użyłem go do przetestowania go dla mojego klienta, musiałem trochę kliknąć w Team Explorer i upewnić się, że są zmiany do cofnięcia. Możliwe, że pojawia się tylko wtedy, gdy masz tylko oczekujące zmiany w kolejce do zatwierdzenia, że ​​pojawia się ta opcja. (lub zmiana tylko jednej gałęzi) ...
Schwarzie2478

2
@ Erzékiel Opcja pojawia się tylko wtedy, gdy Eksplorator rozwiązań jest otwarty i gotowy.
MatrixRonny

1
To rozszerzenie działa czasami, a jego obecność jest związana z otwarciem Eksploratora kontroli źródła TFS, a nie Eksploratorem rozwiązań (jak niektórzy błędnie zauważyli) - nie mieszaj dwóch różnych okien sterowania. Jednak; kiedy mówię, to dlatego, że przychodzi i odchodzi. W tej chwili tego nie mam, zrobiłem to miesiąc temu. Jest trochę wadliwy i obawiam się, że winowajcą są inne rozszerzenia, takie jak Resharper i tym podobne.
Christian

8

Jeśli po prostu ponownie zwrócisz wszystkie pliki, które wyewidencjonowałeś, TFS jest wystarczająco inteligentny, aby dowiedzieć się, które z nich uległy zmianie i uwzględnić je tylko w zestawie zmian zarejestrowanym na serwerze.

TFS robi to, porównując skróty MD5 zawartości plików przed i po wpisaniu.

Wszystko to przy założeniu, że proces generowania polega wyłącznie na aktualizowaniu tego samego zestawu plików, tj.nigdy nie będzie przypadku, w którym plik, który został wygenerowany w poprzedniej generacji, nie będzie potrzebny w następnej generacji (tj. Będziesz chciał czekać na usunięcie dla tego pliku) lub zmiana nazwy plików.

Jeśli twój proces może potencjalnie wymagać usunięcia plików, najlepszym rozwiązaniem może być sprawdzenie polecenia Team Foundation Power Tools ( tfpt ) i użycie polecenia tfpt online, które wypisze tylko te pliki, które uległy zmianie i będzie wystarczająco inteligentne, aby pend usuwa wszelkie pliki, które nie są już potrzebne lub zmieniono nazwę i pend add.

Powodzenia,

Jaskółka oknówka.


6
Dzięki za to, jednak nie chcemy w tym czasie rejestrować zmodyfikowanych plików. Zmodyfikowane nie powinny być sprawdzane, dopóki funkcja nie zostanie ukończona, ale niezmodyfikowane należy usunąć, aby deweloper mógł przejrzeć zmiany.
Robert Wagner,

@RobertWagner Jeśli masz kompilację bramkowaną, możesz anulować (jeśli nie zostanie przerwana po wykryciu identycznego pliku), gdy pojawi się wyskakujące powiadomienie, że zmiany należy najpierw wprowadzić.
Elaskanator

6

Należy pamiętać, że funkcja cofania TFS nie przywróci wartości „Data modyfikacji” systemu plików. Jest to bardzo frustrujące, zwłaszcza jeśli używasz narzędzi takich jak robocopy do synchronizowania zdalnych maszyn. Nawet po cofnięciu wypisania, jeśli zapisałeś plik, aktualizując w ten sposób wartość „Data modyfikacji”, ta zaktualizowana wartość będzie obowiązywać nawet po cofnięciu wypisania.


1
Albo użyj robocopy, albo VCS, użycie mieszaniny zawsze spowoduje niespójności. O wiele lepiej byłoby zapełnić każdą maszynę bezpośrednio z VCS.
Richard

4

Istnieje kilka punktów dotyczących opcji uu dla tfpt (zalecanych w większości innych odpowiedzi), które na początku nie były dla mnie jasne. Po pierwsze, jest to pomoc wiersza poleceń, do której można uzyskać dostęp za pomocą poleceniatfpt uu /?

Cofa zbędne oczekujące zmiany. Jeśli stan elementu z oczekującą zmianą jest taki sam jak na serwerze, zmiana jest cofnięta.

Użycie: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [filespec ...]

  • / changeset Porównaj obszar roboczy ze stanami elementów w określonej wersji zestawu zmian zamiast z najnowszą wersją
  • filespec ... Sprawdzaj tylko wymienione specyfikacje plików pod kątem zbędnych zmian
  • / recursive Sprawdza określone specyfikacje plików z pełną rekurencją
  • / noget Nie uruchamiaj get przed sprawdzeniem

Opcji / changeset nie można używać z specyfikacjami plików lub / recursive.

Pozwólcie, że podzielę się poleceniem zalecanym w innych odpowiedziach.

tfpt uu . /noget /recursive
  • tfpt uu określa, że ​​chcemy użyć polecenia „Cofnij bez zmian”.
  • . wskazuje (chyba), że bieżący katalog roboczy powinien być używany jako specyfikacja pliku.
  • /noget zapewnia, że ​​polecenie „pobierz najnowszą wersję” nie zostanie wywołane przed cofnięciem niezmienionych plików.
  • /recursivezapewnia, że ​​pod uwagę będą brane nie tylko specyfikacje plików, ale wszystkie rekursywne foldery i pliki potomne. Wydaje się, że zależy to od specyfikacji pliku - jeśli jej nie podano, przetwarzany jest cały obszar roboczy.

Jest więc kilka rzeczy, na które należy zwrócić uwagę w związku z poleceniem z góry ...

  • Zależy to od katalogu roboczego.
  • Nie przetwarza całego obszaru roboczego.

Zauważyłem, że następujące polecenie działa najlepiej dla mnie - przetworzy cały obszar roboczy.

tfpt uu /noget

Zauważ, że nadal jest zależny od katalogu roboczego, ponieważ tfpt używa go do określenia, który obszar roboczy powinien zostać przetworzony. Ale jeśli podasz ścieżkę do pliku lub folderu w obszarze roboczym, możesz iść.


3

Widzę powyżej podejście Raya LionFanga. Nie mogę tam komentować, ponieważ nie mam przedstawiciela. Chociaż podoba mi się to podejście, ponieważ nie są wymagane żadne zmiany w narzędziach itp ........

  1. Kliknij prawym przyciskiem myszy swój projekt
  2. wybierz cofnij kasę, a następnie kliknij OK lub jakiekolwiek potwierdzenie pozostało ...
  3. następnie, podczas cofania wypisania, dla każdego pliku, który zawiera PRAWDZIWE zmiany, pojawi się monit o potwierdzenie wyewidencjonowania tego pliku ... po prostu kliknij „Nie dla wszystkich”
  4. Program Visual Studio będzie wiedział, czy wyewidencjonowany plik ma zmiany, czy nie. Należy pamiętać, że ta metoda usuwa również dodane pliki, które nie zostały jeszcze wpisane z TFS ...

....... jest problem z takim podejściem w tym, że wybranie „Nie dla wszystkich” zachowuje kilka plików, które nie są modyfikowane. Wydaje się, że robi coś w rodzaju Cofania niezmodyfikowanych plików, dopóki nie trafi do pierwszego pliku, który faktycznie został zmodyfikowany, a następnie zignoruje pozostałe niezmodyfikowane pliki, jeśli ma to jakiś sens. Widziałem ten efekt tylko raz na jakiś czas.

Potencjalnym obejściem jest postępowanie zgodnie z powyższym procesem, ale zamiast wybierać „Nie dla wszystkich”, kliknij „Nie” dla każdego pliku. Ponieważ może to chwilę potrwać, w zależności od liczby plików, z którymi pracujesz, zwykle przytrzymuję wciśnięte klawisze „ALT + N”, a to po prostu przyspiesza przeglądanie wszystkich plików, jednocześnie cofając WSZYSTKIE niezmodyfikowane pliki.


proszę o poradę, ponieważ nie można tego wystarczająco podkreślić. W ten sposób nowo dodane pliki do projektu są również usuwane. Jest to również wspomniane w kilku innych odpowiedziach.
Christian

-20

O ile zrozumiałem, w TFS, jeśli wyewidencjonujesz projekt zespołowy, cały projekt jest wyewidencjonowany i nie masz kontroli nad tym, które pliki są usuwane. Jeśli chcesz zapobiec zameldowaniu się w niektórych plikach, możesz je zablokować.

W pracy wszyscy nienawidzimy TFS.


1
Możemy pobierać pojedyncze pliki, a zablokowanie go nie pozwoliłoby programiście ich zaewidencjonować.
Robert Wagner

5
Zamierzałem oddać głosowanie, ale „W pracy wszyscy nienawidzimy TFS”. uratował to.
James
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.