Załóżmy, że jakiś programista w moim zespole odłożył na półkę swoje zmiany, które wprowadził w gałęzi A. A ja pracuję w gałęzi B. Czy mogę cofnąć jego zmiany do gałęzi B? (Przez GUI lub wiersz poleceń)
Załóżmy, że jakiś programista w moim zespole odłożył na półkę swoje zmiany, które wprowadził w gałęzi A. A ja pracuję w gałęzi B. Czy mogę cofnąć jego zmiany do gałęzi B? (Przez GUI lub wiersz poleceń)
Odpowiedzi:
Narzędzia Visual Studio Power Tools powinny Ci to umożliwić.
C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes
Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.
Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
[/migrate /source:serverpath /target:serverpath]
shelvesetname The name of the shelveset to unshelve
/nobackup Skip the creation of a backup shelveset
/migrate Rewrite the server paths of the shelved items
(for example to unshelve into another branch)
/source:serverpath Source location for path rewrite (supply with /migrate)
/target:serverpath Target location for path rewrite (supply with /migrate)
/nobackup Skip the creation of a backup shelveset
Na przykład, aby scalić zestaw półek o nazwie „Nazwa zestawu półek” utworzony w Oddział1 do Oddziału2, użyj tego:
>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"
Alternatywne rozwiązanie dla tfpt, które pozwala uniknąć konieczności ręcznego scalania każdego pliku
Problem z narzędziem tfs polega na tym, że wykonujesz „bezpodstawne scalanie”, więc musisz potwierdzać każdy plik . Miałem zestaw ponad 800 plików i nigdy nie ufałem przyciskowi „auto merge” i nie chciałem przeglądać każdego pliku po kolei - więc musiałem znaleźć inny sposób!
C:\temp\shelveset-name
(Uwaga: nie ma paska postępu podczas eksportowania - więc jeśli masz duży zestaw półek, którego eksportowanie zajmuje dużo czasu, wystarczy sprawdzić w Eksploratorze Windows (Plik> Właściwości> Rozmiar), czy pliki nadal spadają, jeśli myślę, że jest zamrożone).
Teraz wystarczy skopiować je do nowej gałęzi za pomocą Eksploratora Windows.
To zadziałało dla mnie:
c:\temp\shelveset-name
będzie musiała zostać zmieniona, aby odpowiadała nowej gałęzi. Wskazówka: upewnij się, że kopiujesz we właściwe miejsce !!!Ważne: odkryłem, że jeśli najpierw nie przełączysz TFS do trybu offline, w końcu wszystkie nowe pliki (z zestawu zmian na półkach) będą wyświetlane bez małego czerwonego znacznika wyboru i będziesz musiał je wykluczyć i dołączyć ponownie żeby je dodać. Jeśli ktoś ma alternatywne rozwiązanie tego problemu, chciałbym wiedzieć - odświeżanie wydaje się nie działać.
Informacje o półce obejmują konkretną ścieżkę, do której dochodzi. Niestety nie znam żadnego automatycznego sposobu na odłożenie półki w inne miejsce niż to, do którego zostało złożone. Czasami, gdy chciałem to zrobić, musiałem wyewidencjonować równoważne pliki w nowej gałęzi, wyjąć je z półki ze starej gałęzi, a następnie ręcznie skopiować pliki.
EDYCJA: Cóż, myślę, że robiłem to na własnej skórze. Będę musiał wypróbować rozwiązanie Curta. :)
Spędziłem dużo czasu, aby to zrobić i miałem kilka problemów do rozwiązania. Jest to możliwe, ale tutaj kilka kwestii i kilka zasad, których należy przestrzegać, aby uniknąć tych problemów
Błąd:
nie można określić obszaru roboczego
Ten konkretny problem rozwiązano, uruchamiając polecenie z folderu głównego gałęzi źródłowej . Jest to sprzeczne z niektórymi odpowiedziami na SO, w których mówią, aby użyć gałęzi „docelowej” - nie, użyj „źródła”:
cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"
Po tym pojawił się drugi numer. Wygląda na to, że nie mógł połączyć się z serwerem TFS. Z tego co sobie uświadomiłem, mam zainstalowanych wiele VS i podłączonych do różnych serwerów TFS. Używałem VS12 i miałem połączenie z obszarem roboczym i serwerem. Ale nie zdawałem sobie sprawy, że to samo połączenie musi zostać zreplikowane w VS13, aby TFPT2013 działało. Łączy się z tym samym serwerem i obszarem roboczym.
Próbowałem też to zrobić używając TFPT2015, ale zainstalowałem go i nie zainstalowałem TFPT.exe, więc był bezużyteczny. Więc próbowałem od TFPT2013 do TFS2015 i zadziałało dla tego konkretnego polecenia. Zastanawiam się, dlaczego nie, jeśli VS12 / 13 działa dobrze z TFS2015?
Podsumowując
Poniższe kroki można zastosować w przypadku małych zestawów półek (ok. 20 plików lub mniej).