Mengapa Mengapa MENGAPA TFS tidak mendapatkan pekerjaan terbaru secara konsisten?
Anda akan berpikir bahwa fitur tersebut akan diuji secara menyeluruh.
Apa yang harus saya lakukan adalah, dapatkan versi tertentu, lalu periksa kedua file yang bisa ditimpa + menimpa semua file.
Apakah pengaturan lokal saya kacau atau Anda juga melakukan ini?
Jawaban:
TFS mendefinisikan ulang apa yang dilakukan "Dapatkan Terbaru". Dalam istilah TFS, Dapatkan Terbaru berarti mendapatkan versi terbaru dari file, tetapi abaikan yang menurut server sudah ada di ruang kerja Anda. Yang bagi saya dan hampir semua orang di planet ini salah.
Lihat tautan ini: http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
Satu-satunya cara untuk mendapatkannya agar melakukan apa yang Anda inginkan adalah Dapatkan Versi Spesifik, lalu centang kedua kotak "Timpa ...".
sumber
Kadang
Get specific version
- kadang bahkan memeriksa kedua kotak centang tidak akan memberi Anda file terbaru. Anda mungkin telah membuat perubahan ke file, dan ingin membatalkan perubahan itu dengan mendapatkan kembali versi terbaru. Yah ... itu untuk apaUndo pending changes
dan bukan untuk tujuanGet specific version
.Jika ragu:
Dan ini favorit saya yang baru saya temukan:
awasi
Output
jendela untuk melihat pesan seperti ini:Peringatan - Tidak dapat menyegarkan R: \ TFS-PROYEK \ www.example.com \ ExampleMVC \ Example MVC \ Contoh MVC.csproj karena Anda memiliki suntingan yang tertunda.
Pesan penting ini muncul di jendela output. Tidak ada pemberitahuan lain! Tidak ada dalam perubahan yang tertunda dan tidak ada pesan dialog lain yang memberi tahu Anda bahwa file yang Anda minta secara eksplisit tidak diambil! Dan ya - Anda menyelesaikan ini dengan hanya menjalankan
Undo pending changes
dan mendapatkan file.sumber
Undo pending changes
) berhasil untuk saya.TFS, seperti beberapa penyedia kontrol sumber lainnya, seperti Perforce, melakukan ini, karena sistem tahu apa versi terakhir yang berhasil Anda dapatkan, jadi dapatkan perubahan terbaru menjadi "dapatkan perubahan sejak x". Jika Anda bermain sesuai aturan dan benar-benar memeriksa sesuatu sebelum mengeditnya, Anda tidak membingungkan hal-hal, dan "dapatkan yang terbaru" benar-benar sesuai dengan yang dikatakan.
Seperti yang Anda lihat, Anda dapat memaksanya untuk menilai kembali semuanya, yang memiliki penggunaan bandwidth yang jauh lebih besar, tetapi berperilaku lebih dekat dengan bagaimana SourceSafe dulu.
sumber
Sulit untuk menanggapi pernyataan tanpa contoh bagaimana itu tidak berfungsi, tetapi penting untuk memahami bahwa TFVC (dalam "Server Workspace" mode, yang merupakan mekanisme sebelum TFS 2012) tidak memeriksa keadaan sistem file lokal Anda . TFVC Server Workspaces adalah jenis sistem "checkout-edit-checkin" di mana ini adalah desain-by, keputusan yang disengaja dibuat untuk secara besar-besaran mengurangi jumlah file I / O yang diperlukan untuk menentukan kondisi ruang kerja Anda. Sebaliknya, informasi ruang kerja disimpan di server.
Hal ini memungkinkan TFVC Server Workspace untuk skala untuk sangat codebases besar sangat efisien. Jika Anda berada dalam basis kode multi-gigabyte (seperti Visual Studio atau pohon sumber Windows) maka klien Anda tidak perlu memindai sistem file lokal Anda, mencari file yang mungkin telah berubah, karena kontrak yang Anda miliki dengan TFS adalah bahwa Anda akan secara eksplisit memeriksa file ketika Anda ingin mengeditnya.
Anda diharapkan tidak menandai file sebagai hanya-tulis dan mengubahnya tanpa secara eksplisit memeriksanya terlebih dahulu. Jika Anda turun rute ini, maka server tidak tahu bahwa Anda telah membuat perubahan pada file Anda, dan melakukan operasi "Dapatkan Terbaru" tidak akan memperbarui ruang kerja lokal Anda, karena Anda belum memberi tahu server bahwa Anda telah membuat perubahan.
Jika Anda melakukan menumbangkan mekanisme ini maka Anda dapat menggunakan
tfpt reconcile
perintah untuk memeriksa ruang kerja lokal Anda untuk perubahan yang Anda telah dibuat secara lokal.Jika Anda menemukan diri Anda menggunakan "Dapatkan Versi Spesifik" dan memilih opsi "memaksa" dan "menimpa", maka sangat mungkin Anda memiliki kebiasaan untuk melewati semua penegakan yang telah diterapkan TFS untuk mencegah Anda menyakiti diri sendiri, dan Anda mungkin harus mempertimbangkan Ruang Kerja Lokal TFVC.
Ruang Kerja Lokal TFVC menyediakan jenis sistem kontrol versi "edit-merge-commit", yang berarti bahwa Anda tidak perlu memeriksa file secara eksplisit sebelum mengeditnya dan tidak hanya baca di disk. Sebagai gantinya, Anda hanya perlu mengedit file, dan klien Anda akan memindai sistem file, memperhatikan perubahannya, dan menyajikannya sebagai perubahan yang tertunda.
TFVC Local Workspaces direkomendasikan untuk proyek-proyek kecil yang tidak memerlukan kontrol izin berbutir halus, karena mereka menghadirkan alur kerja yang jauh lebih baik. Anda tidak diharuskan online, dan Anda tidak perlu memeriksa file secara eksplisit sebelum mengeditnya.
Ruang Kerja Lokal TFVC adalah default di TFS 2012, dan jika tidak diaktifkan untuk Anda, maka Anda harus bertanya kepada administrator server Anda. (Organisasi dengan basis kode yang sangat besar atau persyaratan audit yang ketat dapat menonaktifkan Ruang Kerja Lokal TFVC.)
Buku luar biasa Eric Sink, Version Control By Example, menguraikan perbedaan antara sistem checkout-edit-checkin dan edit-merge-commit dan ketika satu lebih sesuai daripada yang lain.
Buku Professional Team Foundation Server 2013 juga memberikan informasi yang sangat baik tentang perbedaan antara Ruang Kerja Server TFVC dan Ruang Kerja Lokal TFVC. Dokumentasi dan blog MSDN juga memberikan informasi terperinci:
sumber
Team Foundation Server (TFS) melacak salinan lokalnya di direktori tersembunyi yang disebut $ TF. Ketika Anda mengeluarkan "dapatkan Versi Terbaru", TFS melihat ke folder ini dan melihat cuaca apakah saya memiliki salinan terbaru atau tidak. Jika berhasil, itu tidak akan mengunduh salinan terbaru. Tidak masalah apakah Anda memiliki file asli atau tidak. Bahkan Anda mungkin telah menghapus seluruh folder (seperti dalam kasus saya) dan TFS tidak akan mengambil salinan terbaru karena tidak melihat ke dalam file aktual tetapi direktori tersembunyi tempat ia mencatat perubahan. Cacat dengan desain ini adalah, apa pun yang dilakukan di luar sistem tidak akan direkam dalam TFS. Misalnya, Anda dapat masuk ke Windows explorer, menghapus folder atau file dan TFS tidak akan mengenalinya. Itu akan benar-benar buta. Setidaknya saya harapkan di sana Windows tidak akan membiarkan Anda menghapus file ini tetapi itu!
Salah satu cara untuk menegakkan salinan terbaru adalah dengan menghapus folder $ TF tersembunyi secara manual. Untuk melakukan itu, buka command prompt dan navigasikan ke folder root tempat proyek Anda diperiksa dan jalankan perintah ini
Jika Anda hanya ingin memeriksa folder tersembunyi, Anda dapat melakukannya menggunakan
Catatan: Jika Anda melakukannya, tf akan berpikir Anda tidak memiliki salinan lokal meskipun Anda memilikinya dalam file dan itu akan menyinkronkan semuanya lagi.
Perhatian: Gunakan metode ini dengan risiko Anda sendiri. Tolong jangan menggunakannya pada pekerjaan kritis.
sumber
"Dapatkan versi terbaru" secara default hanya akan mengunduh file yang telah berubah di server sejak terakhir kali Anda menjalankan "Dapatkan versi terbaru". TFS melacak file yang Anda unduh sehingga tidak menghabiskan waktu mengunduh versi file yang sama lagi. Jika Anda memodifikasi file di luar Visual Studio, ini dapat menyebabkan masalah konsistensi seperti yang Anda lihat.
sumber
Sayangnya, harus ada satu atau lebih bug di TFS 2008, karena masalah ini muncul secara teratur di mesin pengembang dan membangun server tempat saya bekerja juga.
Saya dapat melakukan Dapatkan Terbaru, saya dapat melihat dalam daftar riwayat proyek bahwa ada komitmen setelah saya terakhir melakukan Dapatkan Terbaru, saya belum menyentuh file pada disk dengan cara apa pun, tetapi setelah fungsi "Dapatkan Terbaru" memiliki selesai, ketika saya memeriksa tab TFS, beberapa file masih mengatakan bahwa itu bukan versi terbaru.
Jelas TFS dapat menentukan bahwa saya memiliki file lama secara lokal, karena daftar mengatakan demikian. Namun, Dapatkan Terbaru gagal melakukan itu, dapatkan versi terbaru. Jika saya melakukan apa yang Anda lakukan, gunakan versi Dapatkan Spesifik, dan centang dua kotak centang di bagian bawah dialog, maka file akan diambil.
Kami mengubah server build kami untuk selalu menggunakan jenis fungsi versi Get Specific, jadi bagian ini sekarang berfungsi, tetapi karena server build kami (TeamCity) juga bergantung pada pemeriksaan apakah ada perubahan pada file untuk memulai membangun. , kadang-kadang berubah menjadi mode "tidak ada yang berubah, tidak ada yang bisa dilihat di sini, bergerak bersama" dan tidak melakukan apa-apa sampai kita secara paksa menjalankan konfigurasi build.
Perhatikan bahwa saya pernah mengalami masalah ini pada mesin yang tidak pernah disentuh, kecuali untuk mendapatkan + build terbaru, keduanya secara manual, jadi tidak ada yang merusak file. Hanya saja TFS semakin bingung.
Suatu kali ini dipotong saya memverifikasi bahwa file pada disk memang biner identik dengan versi yang diambil sebelumnya, jadi tidak ada gangguan manual yang dilakukan dengan file.
Juga, saya gagal melihat bagaimana TFS dapat "mengetahui" apakah file telah berubah pada disk atau tidak tanpa benar-benar melihat isinya. Jika salah satu bagian dari TFS dapat melihat bahwa file-file tersebut memang bukan versi terbaru, maka versi Get Latest harus benar-benar bisa mendapatkan versi terbaru. Ini mengacu pada komentar untuk jawaban lain di sini.
sumber
Mungkin karena Anda login TFS sebagai pengguna yang sama, dan nama ruang kerja (berdasarkan nama mesin secara default) juga sama, jadi TFS berpikir Anda berada di mesin yang sama dan ruang kerja yang sama, sehingga Anda sudah memiliki versi terbaru dari file, jadi itu tidak akan mendapatkannya untuk Anda.
coba ganti nama mesin Anda, dan buat ruang kerja baru sebagai mesin baru.
sumber
Saya memiliki masalah yang sama dengan Visual Studio 2012. Tidak peduli apa yang saya lakukan, itu tidak mendapatkan kode dari kontrol sumber TFS.
Dalam kasus saya, penyebabnya adalah memetakan folder + subfolder dari kontrol sumber secara terpisah tetapi ke pohon yang sama di HD lokal saya.
Solusinya adalah menghapus pemetaan subfolder menggunakan jendela "kelola ruang kerja".
sumber
Sebagian besar masalah yang saya lihat dengan pengembang mengeluh bahwa Dapatkan Terbaru tidak melakukan apa yang mereka harapkan berasal dari kenyataan bahwa mereka melakukan Dapatkan Terbaru dari Solution Explorer daripada dari Source Control Explorer. Solution Explorer hanya mendapatkan file yang merupakan bagian dari solusi dan mengabaikan apa pun yang mungkin diperlukan oleh file dalam solusi, dan karenanya bagian dari kontrol sumber, sedangkan Source Control explorer membandingkan ruang kerja lokal Anda dengan repositori di server untuk menentukan file mana dibutuhkan.
sumber
Ketika saya mengalami masalah ini dengan itu tidak mendapatkan ketidakcocokan versi terbaru dan saya pertama kali melakukan "Dapatkan Versi Spesifik" mengaturnya ke changeset dan dimasukkan ke dalam 1. Ini kemudian akan menghapus semua file dari ruang kerja lokal Anda (untuk proyek itu, folder, file, dll) dan itu juga akan memiliki pembaruan TFS sehingga ia tahu Anda sekarang TIDAK memiliki unduhan versi Anda kemudian dapat melakukan "Dapatkan Terbaru" dan biola, Anda benar-benar akan memiliki yang terbaru
sumber
Itu bisa terjadi ketika Anda menggunakan TFS dari dua mesin berbeda dengan akun yang sama, jika demikian Anda harus membandingkan untuk melihat file yang diubah dan memeriksanya lalu dapatkan yang terbaru lalu batalkan perubahan yang tertunda untuk menghapus checkout
sumber
Ini bekerja untuk saya:
1. Keluar dari Visual Studio
2. Buka jendela perintah dan arahkan ke folder: "% localappdata% \ Local \ Microsoft \ Team Foundation \"
3. Navigasikan ke sub folder untuk setiap versi dan hapus sub folder "cache" dan kontennya
4. Mulai ulang Visual Studio dan sambungkan ke TFS.
5. Uji Dapatkan Versi Terbaru.
sumber
hanya ingin menambahkan TFS MSBuild tidak mendukung karakter khusus pada folder yaitu "@"
Saya telah mengalami di masa lalu di mana salah satu folder proyek kami bernama External @ Project1
kami membuat definisi TFS Build untuk menjalankan file msbuild khusus maka folder workspace tidak mendapatkan konten apa pun di folder External @ Project1 selama workspace mendapatkan yang terbaru. Tampaknya get tfs gagal tetapi tidak menunjukkan kesalahan.
setelah beberapa percobaan dan kesalahan dan mengganti nama folder menjadi _Project1. voila kami mendapat file di folder (_Project1).
sumber
Alat: Alat Listrik TFS
Sumber: http://dennymichael.net/2013/03/19/tfs-scorch/
Perintah: tfpt hangus / rekursif / hapus C: \ LocationOfWorkspaceOrFolder
Ini akan memunculkan kotak dialog yang akan meminta Anda untuk Hapus atau Unduh daftar file. Pilih atau Batalkan pilihan file yang sesuai dan tekan ok. Tampilan di Kotak (Kotak Centang, Nama File, FileAction, FilePath)
Penyebab: TFS hanya akan dibandingkan dengan item di ruang kerja. Jika perubahan dilakukan di luar ruang kerja TFS tidak akan menyadarinya.
Semoga seseorang menemukan ini berguna. Saya menemukan posting ini setelah menghapus beberapa folder di berbagai lokasi. Tidak ingat folder mana yang saya hapus tidak termasuk opsi Force Get / Replace yang biasa saya gunakan.
sumber
Dalam kasus saya, Dapatkan versi spesifik, bahkan mencentang kedua kotak centang dan membatalkan semua perubahan yang tertunda tidak berfungsi.
Memeriksa ruang kerja. Edit ruang kerja saat ini. Periksa semua jalur. Jalur solusi salah dan menunjuk ke folder yang dihapus.
Memperbaiki jalur dan mendapatkan yang terbaru berfungsi dengan baik.
sumber
Pergi dengan klik kanan: Lanjutan> Dapatkan Versi Spesifik . Pilih "Versi Letest" dan sekarang, penting, tandai dua cek:
Pemeriksaannya adalah:
Timpa file yang dapat ditulisi yang tidak dicentang
Timpa semua file bahkan jika versi lokal cocok dengan versi yang ditentukan
sumber