Alguém tem um script ou apelido para localizar arquivos não rastreados (realmente: não adicionados) em uma árvore do Perforce?
EDIT: Eu atualizei a resposta aceita neste, pois parece que P4V adicionou suporte para isso na versão de janeiro de 2009.
version-control
perforce
David Joyner
fonte
fonte
p4 status
não apenas ENCONTRA arquivos não rastreados, mas na verdade COMEÇA A rastreá-los. Oup4 status
seja, não é uma consulta somente leitura, como se poderia suspeitar pelo nome, mas na verdade é um comando que muda coisas - não os arquivos do espaço de trabalho. Isso NÃO é o que um comando de status deve fazer, e NÃO o quesvn status
faz. A coisa mais próxima que posso encontrarsvn status
ép4 reconcile -na
- -a para dizer "arquivos que devem ser adicionados", -n para dizer "não mude realmente nada". /// Eu originalmente disse algo muito mais forte.p4 status
) , e respondi eu mesmo. Melhor bemp4 reconcile
ep4 status
são lentos como o inferno, enquantogit status
concluem a execução em 1-3 segundos.Respostas:
EDIT: Por favor, use
p4 status
agora. Não há mais necessidade de pular através de aros. Veja a resposta de @CoronelPanic .Na versão de janeiro de 2009 do P4V, você pode clicar com o botão direito em qualquer pasta na árvore da sua área de trabalho e clicar em "reconciliar trabalho offline ..."
Isso fará um pequeno processamento e, em seguida, exibirá uma visualização em árvore dividida dos arquivos que não foram retirados, mas têm diferenças da versão do depósito ou não foram registrados de forma alguma. Pode até haver algumas outras categorias que ele apresenta.
Você pode clicar com o botão direito do mouse nos arquivos nesta visualização e verificá-los, adicioná-los ou até mesmo revertê-los.
É uma ferramenta muito útil que me salvou algumas vezes.
EDIT: ah a pergunta feita sobre scripts especificamente, mas vou deixar esta resposta aqui para o caso.
fonte
p4 status
não apenas ENCONTRA arquivos não rastreados, mas na verdade COMEÇA A rastreá-los. Oup4 status
seja, não é uma consulta somente leitura, como se poderia suspeitar pelo nome, mas na verdade é um comando que muda coisas - não os arquivos do espaço de trabalho. Isso NÃO é o que um comando de status deve fazer, e NÃO o quesvn status
faz. A coisa mais próxima que posso encontrarsvn status
ép4 reconcile -na
- -a para dizer "arquivos que devem ser adicionados", -n para dizer "não mude realmente nada". /// Eu originalmente disse algo muito mais forte.p4 status
é basicamente um sinônimo dep4 reconcile -n
. Talvez você tenha executado op4 status -A
que é sinônimo dep4 reconcile
?No Linux, ou se você tiver o gnu-tools instalado no Windows:
Isso mostrará uma mensagem de erro para cada arquivo não contabilizado. Se você deseja capturar essa saída:
fonte
.p4ignore
e pode visualizar e editar automaticamente arquivos não rastreados / alterados / excluídos.find . -type l
) e fornece uma saída enganosa para arquivos P4 adicionados à força porque contêm os caracteres@
ou%
. No entanto, esses arquivos são minoria, portanto, uma revisão manual desses casos extremos funcionará na maioria dos casos.No Unix:
Isso imprimirá uma lista de arquivos que não foram adicionados em seu cliente ou no depósito Perforce. Eu costumava
! -name '*~'
excluir arquivos que terminam com ~.fonte
Ahh, um dos clássicos do Perforce :) Sim, é realmente uma pena que AINDA não haja uma maneira fácil de fazer isso embutido nos comandos padrão.
A maneira mais fácil é executar um comando para localizar todos os arquivos na raiz de seus clientes e, em seguida, tentar adicioná-los ao depósito. Você acabará com uma lista de alterações de todos os novos arquivos e os arquivos existentes serão ignorados.
Por exemplo, dir / s / b / AD | p4 -x - adicionar
(use 'find. -type f -print' em uma linha de comando nix).
Se você quiser uma lista física (no console ou arquivo), então você pode canalizar os resultados de uma comparação (ou adicionar se você também quiser em uma lista de alterações).
Se você estiver executando isso no P4Win, você pode usar $ r para substituir a raiz do cliente do espaço de trabalho atual.
fonte
Sim, MAS .
A partir da versão 2012.1 do Perforce, existe o comando
p4 status
e no P4V 'reconciliar trabalho offline'. No entanto, ambos são muito lentos. Para excluir arquivos irrelevantes, você precisará gravar ump4ignore.txt
arquivo por https://stackoverflow.com/a/13126496/284795fonte
p4 status
desde a versão 2012.1. Se você tem se mantido afastadop4 status
devido a problemas de desempenho, pode valer a pena testá-lo novamente para ver como ele se comporta agora.Sinto-me impelido a acrescentar uma resposta, uma vez que a resposta aceita, e algumas das outras, têm o que considero um problema significativo: eles não entendem a diferença entre um comando de consulta somente leitura e um comando que faz alterações.
Não espero nenhum crédito por esta resposta, mas espero que ajude outras pessoas a evitar perder tempo e cometer erros, seguindo a resposta aceita, mas incorreta de IMHO.
--- + BREVE
Provavelmente, a maneira mais conveniente de localizar todos os arquivos não rastreados em um espaço de trabalho forçado é
p4 reconcile -na
.-a
diz "dê-me arquivos que não estão no repositório, ou seja, que devem ser adicionados".-n
diz "não faça alterações" - ou seja, um ensaio. (Embora as mensagens possam dizer "aberto para adicionar", mentalmente você deve interpretar isso como "seria aberto para adicionar se não fosse -n")Provavelmente, a maneira mais conveniente de encontrar todas as alterações locais feitas offline - não apenas os arquivos que podem precisar ser adicionados, mas também os arquivos que podem precisar ser excluídos, ou que foram alterados sem serem abertos para edição através do
p4 edit
, ép4 reconcile -n
.Várias respostas forneceram scripts, muitas vezes envolventes
p4 fstat
. Embora eu não tenha verificado todos esses scripts, muitas vezes uso scripts semelhantes para compensar as deficiências dos comandos do perforce, comop4 reconcile -n
- por exemplo, muitas vezes eu acho que quero caminhos locais em vez de caminhos de depósito Perforce ou caminhos de espaço de trabalho.--- + AVISO
p4 status
NÃO é a contraparte dos comandos de status em outros sistemas de controle de versão.p4 status
NÃO é uma consulta somente leitura.p4 status
na verdade, encontra o mesmo tipo de alterações que op4 reconcile
faz e as adiciona ao repositório.p4 status
não parece ter uma-n
opção de simulação comop4 reconcile
faz.Se você fizer isso
p4 status
, olhe para os arquivos e pense "Oh, eu não preciso deles", então você terá que fazê-p4 revert
los se quiser continuar editando na mesma área de trabalho. Ou então, as alteraçõesp4 status
adicionadas ao seu changeset serão verificadas na próxima vez.Parece haver pouca ou nenhuma razão para usar em
p4 status
vez dep4 reconcile -n
, exceto para alguns detalhes do espaço de trabalho local vs nome do caminho do depósito.Só posso imaginar que quem escolheu 'status' para um comando não somente leitura tinha um comando limitado do idioma inglês e outras ferramentas de controle de versão.
--- +
P4V
GUINa GUI
p4v
, o comando reconciliar encontra as alterações locais que podem precisar ser adicionadas, excluídas ou abertas para edição. Felizmente, ele não os adiciona a uma lista de mudanças por padrão; mas você ainda pode querer ter o cuidado de fechar a janela de reconciliação após inspecioná-la, se você não quiser confirmar as alterações.fonte
Eu uso o seguinte em minha ferramenta que faz backup de todos os arquivos no espaço de trabalho que sejam diferentes do repositório (para Windows). Ele lida com alguns casos estranhos que o Perforce não gosta muito, como espaços em branco incorporados, estrelas, porcentagens e marcas de hash:
" dir / S / B / AD " lista todos os arquivos nesta pasta ou abaixo desta ( / S ) no formato "vazio" ( / B ) excluindo os diretórios (/ AD ). O " sed " muda os caracteres perigosos para sua forma " % xx " (a la HTML), e o comando " p4 have " verifica esta lista (" -x- ") contra o servidor descartando qualquer coisa sobre os arquivos que ele realmente localiza no repositório (" 1> NUL: "). O resultado é um monte de linhas como:
Et voilà!
fonte
Como alternativa a partir do P4Win, use a opção "" Arquivos locais que não estão no depósito "no painel de visualização à esquerda.
Não uso muito o P4V, mas acho que o equivalente é selecionar "Ocultar arquivos do espaço de trabalho local" no menu suspenso de filtro da guia de visualização do espaço de trabalho.p4 help fstat
No P4V 2015.1, você encontrará essas opções no botão de filtro como este:
fonte
Quick 'n Dirty: Em p4v, clique com o botão direito do mouse na pasta em questão e adicione todos os arquivos abaixo dela em uma nova lista de alterações. A lista de mudanças agora conterá todos os arquivos que atualmente não fazem parte do depósito.
fonte
Os comandos a seguir produzem uma saída semelhante a um status, mas nenhum é totalmente equivalente a
svn status
ougit status
, fornecendo um resumo de uma linha do status de cada arquivo:p4 status
p4 opened
p4 diff -ds
fonte
Não tenho pontos de reputação suficientes para comentar, mas a solução de Ross também lista arquivos que estão abertos para adição. Você provavelmente não quer usar a resposta dele para limpar seu espaço de trabalho.
O seguinte usa
p4 fstat
(obrigado Mark Harrison) em vez dep4 have
e lista os arquivos que não estão no depósito e não estão abertos para adição.=== Jac
fonte
Método rápido, mas pouco ortodoxo. Se a base de código não adicionar novos arquivos / alterar a visualização com muita frequência, você pode criar um repositório 'git' local fora de seu checkout. A partir de uma sincronização limpa do perforce, git init, adicione e confirme todos os arquivos localmente. O status do Git é rápido e mostrará arquivos não confirmados anteriormente.
fonte
O
p4 fstat
comando permite que você teste se um arquivo existe no espaço de trabalho, combine comfind
para localizar arquivos para verificar como no seguinte exemplo de Perl:Ou você pode usar
p4 reconcile -n -m ...
Se estiver 'aberto para exclusão', será removido do espaço de trabalho. Observe que o comando acima está sendo executado no modo de visualização (
-n
).fonte
Eu precisava de algo que funcionasse em Linux, Mac ou Windows. Então, escrevi um script Python para ele. A ideia básica é iterar por meio de arquivos e executar
p4 fstat
em cada um deles. (claro, ignorando dependências e pastas tmp)Você pode encontrá-lo aqui: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9
fonte
No P4V, no item de menu "Exibir", escolha "Arquivos na pasta", que abre uma nova guia no painel direito. Na extrema direita das guias, há um pequeno ícone que abre uma janela chamada "Arquivos na pasta" com 2 ícones. Selecione o ícone esquerdo que se parece com um funil e você verá várias opções. Escolha "Mostrar itens que não estão no depósito" e todos os arquivos da pasta serão exibidos. Em seguida, basta clicar com o botão direito no arquivo que deseja adicionar e escolher "Marcar para adicionar ...". Você pode verificar se ele está lá na guia "Pendente". Basta enviar normalmente (Ctrl + S).
fonte