Adakah yang memiliki skrip atau alias untuk menemukan file yang tidak terlacak (really: unadded) di pohon Perforce?
EDIT: Saya memperbarui jawaban yang diterima yang satu ini karena sepertinya P4V menambahkan dukungan untuk ini pada rilis Januari 2009.
version-control
perforce
David Joyner
sumber
sumber
p4 status
tidak hanya MENCARI file yang tidak terlacak, tetapi sebenarnya MULAI MELACAKNYA. Yaitup4 status
bukan kueri hanya-baca, seperti yang diduga dari namanya, tetapi sebenarnya adalah perintah yang mengubah banyak hal - bukan file ruang kerja. Ini BUKAN apa yang harus dilakukan perintah status, dan BUKAN apa yangsvn status
dilakukannya. Hal terdekat yang dapat saya temukansvn status
adalahp4 reconcile -na
- -a untuk mengatakan "file yang harus ditambahkan", -n untuk mengatakan "tidak benar-benar mengubah apa pun". /// Saya awalnya mengatakan sesuatu yang jauh lebih kuat.p4 status
) , dan menjawab sendiri. Lebih baik disambutp4 reconcile
danp4 status
lambat sekali, saatgit status
selesai mengeksekusi dalam 1-3 detik.Jawaban:
EDIT: Silakan gunakan
p4 status
sekarang. Tidak perlu melompati rintangan lagi. Lihat jawaban @ ColonelPanic .Pada P4V versi Jan 2009, Anda dapat mengklik kanan folder mana pun di pohon ruang kerja Anda dan mengklik "rekonsiliasi pekerjaan offline ..."
Ini akan melakukan sedikit pemrosesan kemudian memunculkan tampilan pohon terpisah dari file yang tidak diperiksa tetapi memiliki perbedaan dari versi depot, atau tidak diperiksa sama sekali. Bahkan mungkin ada beberapa kategori lain yang dimunculkan.
Anda dapat mengklik kanan pada file dalam tampilan ini dan memeriksanya, menambahkannya, atau bahkan mengembalikannya.
Ini adalah alat yang sangat berguna yang menyelamatkan saya beberapa kali.
EDIT: ah pertanyaan yang diajukan tentang skrip secara khusus, tetapi saya akan meninggalkan jawaban ini di sini untuk berjaga-jaga.
sumber
p4 status
tidak hanya MENEMUKAN file yang tidak terlacak, tetapi juga MULAI MELACAKNYA. Yaitup4 status
bukan kueri hanya-baca, seperti yang diduga dari namanya, tetapi sebenarnya adalah perintah yang mengubah banyak hal - bukan file ruang kerja. Ini BUKAN apa yang harus dilakukan perintah status, dan BUKAN apa yangsvn status
dilakukannya. Hal terdekat yang dapat saya temukansvn status
adalahp4 reconcile -na
- -a untuk mengatakan "file yang harus ditambahkan", -n untuk mengatakan "tidak benar-benar mengubah apa pun". /// Saya awalnya mengatakan sesuatu yang jauh lebih kuat.p4 status
pada dasarnya adalah sinonim untukp4 reconcile -n
. Mungkin Anda berlarip4 status -A
yang merupakan sinonim darip4 reconcile
?Di linux, atau jika Anda menginstal gnu-tools di windows:
Ini akan menampilkan pesan kesalahan untuk setiap file yang tidak terhitung. Jika Anda ingin menangkap keluaran itu:
sumber
.p4ignore
dan dapat melihat dan secara otomatis mengedit file yang tidak terlacak / diubah / dihapus.find . -type l
), dan memberikan keluaran yang menyesatkan untuk file P4 yang ditambahkan secara paksa karena berisi karakter@
atau%
. Namun, file seperti itu adalah minoritas, jadi tinjauan manual dari kasus tepi ini akan berfungsi di banyak kasus.Di bawah Unix:
Ini akan mencetak daftar file yang tidak ditambahkan di klien Anda atau depot Perforce. Saya sudah terbiasa
! -name '*~'
mengecualikan file yang diakhiri dengan ~.sumber
Ahh, salah satu klasik Perforce :) Ya, sungguh menyebalkan bahwa MASIH tidak ada cara mudah untuk ini dibangun ke dalam perintah default.
Cara termudah adalah dengan menjalankan perintah untuk menemukan semua file di bawah root klien Anda, dan kemudian mencoba menambahkannya ke depot. Anda akan mendapatkan daftar perubahan dari semua file baru dan file yang sudah ada akan diabaikan.
Misalnya dir / s / b / AD | p4 -x - tambahkan
(gunakan 'find. -type f -print' dari baris perintah nix).
Jika Anda menginginkan daftar fisik (di konsol atau file) maka Anda dapat menyalurkan hasil dari sebuah diff (atau menambahkan jika Anda juga ingin mereka dalam daftar perubahan).
Jika Anda menjalankan ini dalam P4Win, Anda dapat menggunakan $ r untuk mengganti root klien dari ruang kerja saat ini.
sumber
Ya, TAPI .
Pada Perforce versi 2012.1, ada perintah
p4 status
dan di P4V 'rekonsiliasi pekerjaan offline'. Namun, keduanya sangat lambat. Untuk mengecualikan file yang tidak relevan, Anda harus menulisp4ignore.txt
file sesuai https://stackoverflow.com/a/13126496/284795sumber
p4 status
sejak rilis 2012.1. Jika Anda menjauh darip4 status
karena masalah kinerja, mungkin ada baiknya Anda mengujinya lagi untuk melihat bagaimana perilakunya sekarang.Saya merasa terdorong untuk menambahkan jawaban, karena jawaban yang diterima, dan beberapa yang lain, memiliki apa yang menurut saya merupakan masalah yang signifikan: mereka tidak memahami perbedaan antara perintah kueri hanya-baca, dan perintah yang membuat perubahan.
Saya tidak mengharapkan kredit apa pun untuk jawaban ini, tetapi saya berharap ini akan membantu orang lain menghindari membuang-buang waktu dan membuat kesalahan dengan mengikuti jawaban yang diterima tetapi IMHO salah.
--- + SINGKAT
Mungkin cara paling mudah untuk menemukan semua file yang tidak terlacak di ruang kerja paksa adalah
p4 reconcile -na
.-a
mengatakan "beri saya file yang tidak ada dalam repositori, yaitu yang harus ditambahkan".-n
mengatakan "tidak membuat perubahan" - yaitu uji coba. (Meskipun pesan mungkin mengatakan "dibuka untuk menambahkan", secara mental Anda harus menafsirkannya sebagai "akan dibuka untuk menambahkan jika tidak -n")Mungkin cara paling nyaman untuk menemukan semua perubahan lokal yang dibuat saat offline - bukan hanya file yang mungkin perlu ditambahkan, tetapi juga file yang mungkin perlu dihapus, atau yang telah diubah tanpa dibuka untuk diedit melalui
p4 edit
, adalahp4 reconcile -n
.Beberapa jawaban memberikan skrip, sering kali melibatkan
p4 fstat
. Meskipun saya belum memverifikasi semua skrip tersebut, saya sering menggunakan skrip serupa untuk mengatasi kekurangan perintah perforce sepertip4 reconcile -n
- misalnya, saya sering menemukan bahwa saya menginginkan jalur lokal daripada jalur depot Perforce atau jalur ruang kerja.--- + PERINGATAN
p4 status
BUKAN mitra untuk perintah status pada sistem kontrol versi lain.p4 status
BUKAN kueri hanya-baca.p4 status
sebenarnya menemukan jenis perubahan yangp4 reconcile
sama, dan menambahkannya ke repositori.p4 status
tampaknya tidak memiliki-n
opsi uji coba sepertip4 reconcile
halnya.Jika ya
p4 status
, lihat file dan berpikir "Oh, saya tidak membutuhkannya", Anda harus menggunakannyap4 revert
jika ingin melanjutkan mengedit di ruang kerja yang sama. Atau perubahan yangp4 status
ditambahkan ke set perubahan Anda akan diperiksa di lain waktu.Tampaknya ada sedikit atau tidak ada alasan untuk menggunakan
p4 status
daripadap4 reconcile -n
, kecuali untuk beberapa detail ruang kerja lokal vs nama jalur depot.Saya hanya dapat membayangkan bahwa siapa pun yang memilih 'status' untuk perintah non-read-only memiliki perintah terbatas dalam bahasa Inggris dan alat kontrol versi lainnya.
--- +
P4V
GUIDi GUI
p4v
, perintah rekonsiliasi menemukan perubahan lokal yang mungkin perlu ditambahkan, dihapus, atau dibuka untuk pengeditan. Untungnya itu tidak menambahkannya ke daftar perubahan secara default; tetapi Anda mungkin masih ingin berhati-hati untuk menutup jendela rekonsiliasi setelah memeriksanya, jika Anda tidak ingin melakukan perubahan.sumber
Saya menggunakan yang berikut ini di alat saya yang mencadangkan file apa pun di ruang kerja yang berbeda dari repositori (untuk Windows). Ini menangani beberapa kasus aneh yang tidak terlalu disukai Perforce, seperti sisipan kosong, bintang, persen, dan tanda pagar:
" dir / S / B / AD " mendaftar semua file di atau di bawah folder ini ( / S ) dalam format "telanjang" ( / B ) tidak termasuk direktori (/ AD ). " Sed " mengubah karakter berbahaya menjadi bentuk " % xx " (a la HTML), dan perintah " p4 have " memeriksa daftar ini (" -x- ") terhadap server yang membuang apa pun tentang file yang sebenarnya ditempatkan di repositori (" 1> NUL: "). Hasilnya adalah sekumpulan garis seperti:
Et voila!
sumber
Atau dari P4Win, gunakan opsi "" File Lokal tidak di Depot "di panel tampilan sebelah kiri.
Saya tidak banyak menggunakan P4V, tapi menurut saya yang setara adalah dengan memilih "Sembunyikan File Ruang Kerja Lokal" di dropdown filter pada tab tampilan Ruang Kerja.
Di P4V 2015.1 Anda akan menemukan opsi ini di bawah tombol filter seperti ini:
sumber
Quick 'n Dirty: Di p4v, klik kanan folder yang dimaksud dan tambahkan semua file di bawahnya ke daftar perubahan baru. Daftar perubahan sekarang akan berisi semua file yang saat ini bukan bagian dari depot.
sumber
Perintah berikut menghasilkan keluaran seperti status, tetapi tidak ada yang cukup setara dengan
svn status
ataugit status
, memberikan ringkasan satu baris dari status setiap file:p4 status
p4 opened
p4 diff -ds
sumber
Saya tidak memiliki cukup poin reputasi untuk dikomentari, tetapi solusi Ross juga mencantumkan file yang terbuka untuk ditambahkan. Anda mungkin tidak ingin menggunakan jawabannya untuk membersihkan ruang kerja Anda.
Penggunaan berikut
p4 fstat
(terima kasih Mark Harrison) sebagai gantip4 have
, dan mencantumkan file yang tidak ada di depot dan tidak terbuka untuk ditambahkan.=== Jac
sumber
Metode cepat, tapi sedikit ortodoks. Jika basis kode tidak menambahkan file baru / mengubah tampilan terlalu sering, Anda dapat membuat repositori 'git' lokal dari pembayaran Anda. Dari sinkronisasi perforce yang bersih, git init, tambahkan dan komit semua file secara lokal. Status Git cepat dan akan menampilkan file yang sebelumnya tidak dilakukan.
sumber
The
p4 fstat
perintah memungkinkan Anda menguji apakah file ada di ruang kerja, menggabungkan denganfind
untuk mencari file untuk memeriksa seperti dalam Perl contoh berikut:Atau Anda bisa menggunakan
p4 reconcile -n -m ...
Jika 'dibuka untuk dihapus' maka itu telah dihapus dari ruang kerja. Perhatikan bahwa perintah di atas berjalan dalam mode pratinjau (
-n
).sumber
Saya membutuhkan sesuatu yang dapat bekerja di Linux, Mac atau Windows. Jadi saya menulis skrip Python untuk itu. Ide dasarnya adalah melakukan iterasi melalui file dan mengeksekusi
p4 fstat
masing-masing file . (tentu saja mengabaikan dependensi dan folder tmp)Anda dapat menemukannya di sini: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9
sumber
Perintah ini dapat memberi Anda daftar file yang perlu ditambahkan, diedit atau dihapus:
p4 status -aed ...
Anda juga dapat menggunakannya secara terpisah
status p4 -a ...
p4 status -e ...
p4 status -d ...
sumber
Di P4V, di bawah item menu "View" pilih "Files in Folder" yang menampilkan tab baru di panel kanan. Di ujung kanan tab ada ikon kecil yang menampilkan jendela bernama "File di Folder" dengan 2 ikon. Pilih ikon kiri yang terlihat seperti corong dan Anda akan melihat beberapa opsi. Pilih "Show items not in Depot" dan semua file di folder tersebut akan muncul. Kemudian klik kanan pada file yang ingin Anda tambahkan dan pilih "Mark for Add ...". Anda dapat memverifikasi itu ada di tab "Tertunda". Kirimkan saja seperti biasa (Ctrl + S).
sumber