TFS: Bir toplu iş dosyasında değiştirilmemiş dosyaların teslim alınmasını nasıl geri alabilirsiniz?


172

Kod oluşturmak için bir toplu iş dosyası kullanırız ve oluşturulan dosyaları Team Foundation Server'dan (TFS) otomatik olarak denetler, böylece bunları yeniden oluşturabilir. Bu dosyaların çoğu değiştirilmez, ancak jeneratör bunu önceden bilmez.

"Tfs undo" komutu ödeme işlemini geri alır, ancak bazılarının değiştirilip değiştirilmediğini (bunu yapmak istemiyoruz) sorar. Ayrıca oluşturulan dosyaları hemen kontrol etmek istemiyoruz.

Kullanıcıya sormadan değiştirilmemiş tüm dosyaların teslim alınmasını geri almak için bir komut (veya bir dizi komut) var mı?


Elle seçme beklentisi ile tüm değişiklikleri geri almayı Not "için Hayır bütün" dosyalar hakkında istendiğinde var o geri alır gibi düzgün çalışmaz değişti ADD(bkz sormadan değişiklikleri Ray'in cevabı ).
Elaskanator

Yanıtlar:


202

Team Foundation Server Elektrikli El Aletleri'nin Değiştirilmemiş Geri Al komutunu inceleyin Ağustos 2011

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

Bağlantı güncellemesi için Matt Florence'a teşekkürler.

Gerçek sözdizimi için teşekkürler Ray Vega .


1
Bu, cevap içeriğinin bir parçası olarak kullanım bilgilerini içerecek şekilde düzenlenmeli / birleştirilmelidir.
mcw


17
hmm, neredeyse herkesin günde birkaç kez yaptığı bir şey: "Elektrikli El Aletleri adlı ayrı bir yükleyiciye
koyalım

1
@Mike Chaliy düşünürdünüz. Şu anda TFS'yi deniyorum ve bunu nasıl yapacağımı araştırıyordum ve burada sona erdi.
vidstige

3
Değişiklikleriniz birleştirilirse çalışmaz. Görünüşe göre tfpt uu, bir dosya değişikliği olmasa bile birleştirme işleminin her zaman gerçek bir değişiklik olduğunu düşünüyor ve bu davranışı çevirme seçeneği yok. Varsayılan bir davranış olarak uygundur, ancak bazen istediğiniz şey bu değildir.
user1164178

124

Team Foundation Server Elektrikli El Aletleri'ni yükleyin ve projenizin çalışma alanı dizininin kökündeki tfpt.exe aracını kullanarak komut satırından aşağıdakileri çalıştırın:

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

/nogetToplam sayıya bağlı olarak son derece uzun zaman alabilen tüm proje dosyalarınızın zorla 'en son alınmasını' önlediği için dahil edilmesi şiddetle önerilir.


12
Bu kabul edilen cevap olmalıdır, ilgili tüm detaylara sahiptir (daha yüksek puanla kanıtlandığı gibi).
rikoe

7
Güzel. Ayrıca, bunu neden Visual Studio'ya kalıcı bir 'Harici Araç' olarak eklemiyorsunuz? Bunu örnek olarak alalım: blog.kurtschindler.net/post/… Komut: [kurulum direktifiniz] \ TFPT.EXE Bağımsız Değişkenler: uu. / noget / recursive İlk dizin: $ (SolutionDir)
rohancragg

12
Soru, bu işlemin komut istemi olmadan yapılmasını belirtir , ancak yanıtların hiçbiri bunu ele almaz. Buna ihtiyacınız varsa, ek / noprompt aradığınız seçenektir. PowerTools belgelerinde bu eksik! Komutlardan birkaçı için bu seçeneği listeler, ancak bunu (UU) değil. Dikkat!
Johnny Kauffman

1
@ user20358 ya cdçalışma alanı dizininizin olduğu yere (örneğin benimki c:\myProject) ya da sonradan açıkça belirtin uu(dönemi .onunla değiştirerek )
Ray

Bunun / Y veya / force gibi bir güç düğmesi var mı? Her zaman gerçekten geri almak isteyip istemediğim sorulur ve bunu otomatikleştirmek isterim. / Y ifadesini oraya koyun, ancak Y seçeneğinin bir değer gerektirdiğini söylüyor.
Squirrelkiller

118

Teşekkürler @mike & @ray,

Bunu kolaylaştırmak istiyorum.

VS'de, Araçlar menüsünde "Harici Araçlar" ı tıklayın.

Harici Araçlar

Ekle'yi tıklayın.

Başlık girin.

Komut: tfpt.exe

Bağımsız Değişkenler: uu. / noget / özyinelemeli

Başlangıç ​​Dizini: [ok düğmesinden seçebilirsiniz].

Çözümü değiştirmeden geri al

Projede değişmeden geri al

Araçlar menüsüne iki yeni komut eklenir.

Gerektiğinde kullanın.

Zevk almak,

Ofir


3
Çok havalı. Bir adım daha ileri gidebilir ve bir kısayol ekleyebilirsiniz. Eklenen komutunuzun ne kadar aşağı olduğuna dikkat edin (örn. Dördüncü olabilir). Ardından Araçlar -> Seçenekler -> Çevre -> Klavye -> öğesine gidin ve 'Metin kutusu içeren komutları göster' Tools.External 'yazın ve bir kısayol atayın. Örneğin, yeni eklenen geri al komutum dördüncü komut olduğu için Tools.ExternalCommand4'ü seçtim. Daha sonra Ctrl + Alt + U, Ctrl + Alt + U kısayol tuşları atadım
Mario

1
Bunun güncellenmiş bir sürümünü alabilir miyiz? Eğer tf.exe bulundu ama uu komutu nedir? bana Tanınmayan komut diyor: uu. Yardımınız için teşekkürler
Shay

1
@Shay: En son TFS elektrikli el aletleri kurulu olarak VS2015'te benim için çalışıyor.
Igor Malin

27
  1. Projenize sağ tıklayın
  2. Ödemeyi geri al'ı seçin, ardından Tamam'ı tıklayın veya onay ne olursa olsun ...
  3. Ardından, ödeme geri alınırken, GERÇEK değişiklikleri olan her dosya için, bir istem sizden bu dosya için kullanıma alma işlemini onaylamanızı isteyecektir ... sadece "Herkese Hayır" ı tıklayın.

Visual studio, teslim alınan dosyanın değişip değişmediğini bilecek.

UYARI: Bu yöntem aynı zamanda yeni dosyaları, yani TFS'ye henüz teslim edilmemiş dosyaları da kaldırır . Bu dosyaları saklamak istiyorsanız "geri aldığınız" dosya grubundan hariç tutmanız yeterlidir.


14
Be aware that this method also removes added files that are not yet checked in from TFS.... evet, bu oldukça acil bir diskalifiye edici.
shortstuffsushi

1
Benim için çalışıyor Temelsiz şubeler birleşiyor. Teşekkürler. Genellikle bu durumda VS, Çözümdeki tüm dosyaları değiştirildi olarak işaretledi.
KoViMa

2
nuget'in güncellenmesi gerekmeyen 10000 dosya için ödeme yapması bir cehennemdir.
Ievgen Naida

13

Sadece TFS2017 ve VS2017 / VS2019 ile çalışırken bu soruyu bir cevapla güncelledik .

Elektrikli el aletleri TFS 2017 için mevcut değildir ve eskileri onunla birlikte iyi çalışamaz, ancak görünüşe göre işlevselliğin çoğu VS2017'nin kendisine veya eklentilerine taşındı (aşağıya bakın).

Visual Studio 2017/2019 Uzantısı

Değiştirilmemiş dosyaları geri alma gibi bazı işlemler bir

VS2017 için uzatma

VS2019 için uzatma

"Değiştirilmemiş Geri Al" düğmesinin yeri:

değişmemiş düğme konumunu geri al

Bilinen hata

'Kaynak Denetim Gezgini'ni açmanız (ve açık bırakmanız) gerekir; böylece Bekleyen Değişiklikler görünümünün Eylem menüsünde' Değişmeden Geri Al 'görüntülenir. burada bildirildi .

Windows Kabuğu Entegrasyon Uzantısı

Ayrıca, Windows kabuk entegrasyonunu , artık TFS Elektrikli El Aletleri'ne bağlı olmayan ayrı bir yükleyici aracılığıyla da ayarlayabilirsiniz .

Windows kabuk entegrasyonu daha önce elektrikli aletlerle tam olarak aynı şekilde çalışmaz, ancak en önemli eylemler benim için çalıştı.



1
Bağlantılı uzantıyı yükledikten sonra VS2017'de "Değiştirmeyi Geri Al" seçeneğini bulamıyorum. Bir şey mi kaçırdım ?
Erzékiel

Çok fazla kullanmadım. Bunu müşterim için test etmek için kullandığımda, Team Explorer'da biraz tıklamak ve geri alınacak değişikliklerin olduğundan emin olmak zorunda kaldım. Yalnızca bu seçeneğin göründüğü bir taahhüt için sıraya alınmış değişiklikleriniz olduğunda görünebilir. (veya yalnızca bir şube değişir) ...
Schwarzie2478

2
@ Erzékiel Bu seçenek yalnızca Solution Explorer açık ve hazır olduğunda görünür.
MatrixRonny

1
Bu uzantı bazen çalışır ve varlığı , TFS Kaynak Kontrol Gezgini'nin Çözüm Gezgini değil açık olmasıyla bağlantılıdır (bazılarının yanlış belirtildiği gibi) - iki farklı kontrol penceresini karıştırmayın. Ancak; bazen dediğimde, çünkü gelir ve gider. Şu an sahip değilim, bir ay önce yaptım. Onun küçük bir adamcağız ve diğer uzantıları Resharper ve benzeri gibi suçlu korkuyorum.
Christian

8

Teslim aldığınız tüm dosyaları tekrar kontrol ederseniz, TFS hangilerinin değiştiğini anlayacak kadar akıllıdır ve yalnızca sunucuda kaydedilen değişiklik kümesine dahil eder.

TFS bunu, check-in öncesi ve sonrası dosya içeriklerinin MD5 karma değerlerini karşılaştırarak yapar.

Tüm bunlar, oluşturma işleminizin tamamen aynı dosya kümesini güncellediğini varsayar; başka bir deyişle, bir önceki nesilde oluşturulmuş bir dosyanın bir sonraki nesilde gerekmediği (yani bir silmeyi beklemek istemediğiniz) bu dosya için) veya dosyaların adını değiştirdiğinden emin olun.

İşleminiz muhtemelen dosyaların silinmesine ihtiyaç duyabiliyorsa, en iyi seçiminiz Team Foundation Power Tools komutuna ( tfpt ) bakmak ve yalnızca değişen dosyaları kontrol edecek ve yeterince akıllı olacak tfpt çevrimiçi komutunu kullanmak olabilir. pend, artık ihtiyaç duyulmayan veya adı değiştirilmeyen dosyalar için siler ve pend ekler.

İyi şanslar,

Martin.


6
Bunun için teşekkürler, ancak değiştirilen dosyaları o zaman kontrol etmek istemiyoruz. Değiştirilenler özellik tamamlanana kadar kontrol edilmemelidir, ancak geliştiricinin değişiklikleri inceleyebilmesi için değiştirilmemiş olanlar kaldırılmalıdır.
Robert Wagner

@RobertWagner Geçitli bir yapıya sahipseniz, değişikliklerin önce yapılması gerektiğine dair açılır pencere uyarısı aldığınızda iptal edebilirsiniz (özdeş dosya algılama üzerine iptal olmazsa).
Elaskanator

6

TFS geri almanın Dosya Sisteminin "Değiştirme Tarihi" değerini geri döndürmeyeceğine dikkat edin. Özellikle uzak makineleri senkronize etmek için robokopi gibi araçlar kullanıyorsanız bu çok sinir bozucu. Ödemenizi geri aldıktan sonra bile, dosyayı kaydedip "Değiştirilme Tarihi" değerini güncellerseniz, güncellenen değer, geri alma işleminden sonra bile değişecektir.


1
Ya robokopi ya da bir VCS kullanın, bir karışım kullanmak her zaman tutarsızlıklar verecektir. Her makineyi doğrudan VCS'den doldurmak çok daha iyi olurdu.
Richard

4

İlk başta bana açık olmayan tfpt için uu seçeneğiyle ilgili (diğer cevapların çoğunda önerilir) birkaç nokta var. İlk olarak, komutla erişilebilen komut satırı yardımıtfpt uu /?

Gereksiz bekleyen değişiklikleri geri alır. Bekleyen değişikliği olan bir öğenin durumu sunucudakiyle aynı ise, değişiklik geri alınır.

Kullanım: tfpt uu [/ changeset: changesetnum] [/ özyinelemeli] [/ noget] [dosyabelir ...]

  • / changeset Çalışma alanını, en son sürüm yerine belirtilen değişiklik kümesi sürümünde öğe durumlarıyla karşılaştırın
  • filespec ... Yalnızca listelenen dosya özelliklerini gereksiz değişiklikler açısından kontrol edin
  • / recursive Belirtilen dosya özelliklerini tam özyineleme ile denetleme
  • / noget Kontrol etmeden önce get komutunu çalıştırma

/ Changeset seçeneği, dosya özellikleri veya / özyinelemeli olarak kullanılamaz.

Şimdi diğer cevaplarda önerilen komutu yıkayım.

tfpt uu . /noget /recursive
  • tfpt uu 'Değişmeden Geri Al' komutunu kullanmak istediğimizi belirtir.
  • . (sanırım) geçerli çalışma dizininin dosyabelirtimi olarak kullanılması gerektiğini belirtir.
  • /noget değiştirilmemiş dosyaları geri almadan önce 'en son sürümü al'ın çağrılmamasını sağlar.
  • /recursiveyalnızca dosya türünün değil tüm özyinelemeli alt klasörlerin ve dosyaların dikkate alınmasını sağlar. Bu, filespec'e bağlı gibi görünüyor - eğer sağlanmamışsa, tüm çalışma alanı işlenir.

Bu yüzden, yukarıdaki komutla ilgili burada dikkat edilmesi gereken birkaç şey var ...

  • Çalışma dizinine bağlıdır.
  • Tüm çalışma alanını işlemez.

Aşağıdaki komutun benim için en iyi şekilde çalıştığını buldum - tüm çalışma alanını işleyecek.

tfpt uu /noget

Tfpt'nin hangi çalışma alanının işlenmesi gerektiğini belirlemek için onu kullandığı çalışma dizinine bağımlı olduğunu unutmayın. Ancak, çalışma alanındaki bir dosya veya klasöre bir yol sağladığınız sürece, hazırsınız demektir.


3

Ray LionFang'ın yaklaşımını yukarıda görebiliyorum. Ben temsilcisi olmadığı için orada yorum yapamam. Araçlar vb. Üzerinde herhangi bir değişiklik yapılması gerekmediği için bu yaklaşımı seviyorum

  1. Projenize sağ tıklayın
  2. geri almayı seçin, ardından tamam'ı tıklayın veya onay ne olursa olsun ...
  3. ardından, geri alma işlemi sırasında, GERÇEK değişiklikleri olan her dosya için, bir komut istemi o dosya için kullanıma alma işlemini onaylamanızı ister ... sadece "Herkese Hayır" ı tıklamanız yeterlidir.
  4. Visual studio, teslim alınan dosyanın değişip değişmediğini bilecek. Bu yöntemin, henüz TFS'den teslim edilmeyen eklenmiş dosyaları da kaldırdığını unutmayın ...

....... "Herkese Hayır" tuşuna basmanın değiştirilmemiş birkaç dosyayı tutmasıyla ilgili bir sorun var. Gerçekte değiştirilen ilk dosyaya ulaşıncaya kadar değiştirilmemiş dosyaları geri alma ve daha sonra herhangi bir anlam ifade ediyorsa değiştirilmemiş dosyaların geri kalanını yok sayma gibi bir şey yapıyor gibi görünüyor. Bu etkiyi arada bir gördüm.

Potansiyel bir çözüm yukarıdaki işlemi takip etmektir, ancak "Herkese Hayır" tuşuna basmak yerine her dosya için "Hayır" tuşuna basın. Bu, çalıştığınız dosya sayısına bağlı olarak biraz zaman alabileceğinden, normalde yaptığım "ALT + N" tuşunu basılı tutmak ve TÜM değiştirilmemiş dosyaları geri alırken tüm dosyalar arasında hızlanır.


lütfen yeterince vurgulanamayacağından emin olun. Bu yaklaşımla projeye yeni eklenen dosyalar da kaldırılıyor. Bu, diğer cevapların da sunulmasında belirtilmiştir.
Christian

-20

Anladığım kadarıyla, TFS'de bir takım projesini kontrol ederseniz, tüm proje teslim alınır ve hangi dosyaların indirildiğini kontrol edemezsiniz. Belirli dosyalarda check-in işlemlerini önlemek istiyorsanız, onları kilitleyebilirsiniz.

İş yerinde hepimiz TFS'den nefret ediyoruz.


1
Tek tek dosyaları kontrol edebiliriz ve kilitlemek, geliştiricinin onları teslim etmesine izin vermez.
Robert Wagner

5
Oy kullanmaktan vazgeçecekti, ama "İş yerinde hepimiz TFS'den nefret ediyoruz." kaydetti.
James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.