Pergunta

Às vezes eu uso o recurso 'Reconciliar trabalho offline...' encontrado no IDE P4V do Perforce para sincronizar quaisquer arquivos nos quais estive trabalhando enquanto estava desconectado do depósito P4.Ele abre outra janela que executa uma 'Diferença de pasta'.

Eu tenho arquivos que nunca quero fazer check-in no controle de origem (como aqueles encontrados na pasta bin, como DLLs, saída gerada por código, etc.). Existe uma maneira de filtrar esses arquivos/pastas para que não apareçam como "novos" que podem ser adicionado.Eles tendem a confundir a lista de arquivos nos quais estou realmente interessado.O P4 tem o equivalente ao recurso 'ignorar arquivo' do Subversion?

Foi útil?

Solução

A partir da versão 2012.1, o Perforce suporta o P4IGNORE variável de ambiente.Atualizei minha resposta para esta pergunta sobre ignorar diretórios com uma explicação de como funciona.Então notei esta resposta, que agora é supérflua, eu acho.


Supondo que você tenha um cliente chamado "CLIENT", um diretório chamado "foo" (localizado na raiz do seu projeto) e deseja ignorar todos os arquivos .dll nessa árvore de diretórios, você pode adicionar as seguintes linhas à visualização do seu espaço de trabalho para realizar esse:

-//depot/foo/*.dll //CLIENT/foo/*.dll
-//depot/foo/.../*.dll //CLIENT/foo/.../*.dll

A primeira linha os remove do diretório "foo" e a segunda linha os remove de todos os subdiretórios.Agora, quando você 'Reconciliar trabalho offline...', todos os arquivos .dll serão movidos para as pastas "Arquivos excluídos" na parte inferior da exibição de comparação de pastas.Eles estarão fora do seu caminho, mas ainda poderão visualizá-los e manipulá-los se você realmente precisar.

Você também pode fazer isso de outra maneira, o que reduzirá sua pasta "Arquivos Excluídos" para apenas um, mas você não poderá manipular nenhum dos arquivos que ela contém porque o caminho estará corrompido (mas se você quiser apenas removê-los do seu jeito, não importa).

-//depot/foo.../*.dll //CLIENT/foo.../*.dll

Outras dicas

Sim mas.

A versão 2012.1 do Perforce adicionou um recurso conhecido como p4ignorar, inspirado no Git.No entanto, os desenvolvedores do Perforce fizeram uma alteração no comportamento, sem justificativa, que tornou o recurso muito menos útil.

Embora o Git aceite regras de todos .gitignore arquivos, o Perforce não sabe onde procurar até que você especifique um nome de arquivo em uma variável de ambiente P4IGNORE.Essa liberdade é uma maldição.Você não pode hackear dois repositórios que usam nomes diferentes para seus arquivos ignorados.

Além disso, o recurso de ignorar do Perforce não funciona perfeitamente.Você pode configurá-lo com bastante facilidade para si mesmo, mas outros não se beneficiam, a menos que aceitem explicitamente.Um contribuidor que não o fez pode acidentalmente submeter arquivos indesejados (por exemplo.a bin pasta criada por um script de construção).

O recurso ignorar do Git é ótimo porque funciona perfeitamente.Se o .gitignore arquivos são adicionados ao repositório (todo mundo faz isso), eles resolverão o problema para todos.Ninguém publicará acidentalmente sua chave privada.

Divertidamente, o Documentos obrigatórios mostra '.p4ignore' como exemplo de regra para ignorar, que está ao contrário!Se as regras forem úteis, elas deverão ser compartilhadas como parte do repositório.


Perforce ainda poderia melhorar o recurso.Escolha uma convenção para os nomes dos arquivos, digamos p4ignore.txt, então o recurso funciona perfeitamente.Largue o P4IGNORE variável de ambiente, é contraproducente.Edite os documentos para incentivar os desenvolvedores a compartilhar regras úteis.Permita que os usuários escrevam regras pessoais em um arquivo em sua pasta pessoal, como o Git faz.

Se você conhece alguém da Perforce, envie esta postagem por e-mail.

Isso funciona a partir do Perforce 2013.1, o novo mecanismo P4IGNORE foi adicionado pela primeira vez na versão 2012.1, descrito no blog do Perforce aqui:

https://www.perforce.com/blog/new-20121-p4ignore

Conforme descrito atualmente, você define uma variável de ambiente "P4IGNORE" como um nome de arquivo que contém uma lista de arquivos a serem ignorados.

Então você pode dar uma olhada para ver se gosta.

Se você deseja uma solução que se aplique a todos os espaços de trabalho sem precisar ser copiada, você (ou seu administrador de sistema) pode recusar o envio desses tipos de arquivo usando linhas como as abaixo na tabela de proteção p4:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

Lembro-me de ter feito isso antes, mas não tenho as permissões necessárias para testar aqui.Confira Guia de administração de sistemas do Perforce e experimente

Perforce Streams torna muito mais fácil ignorar arquivos, a partir da versão 2011.1.De acordo com documentação, você pode ignorar certas extensões ou caminhos em seu diretório.

De p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

Basicamente, isso faz o que a resposta do @raven especifica, mas é mais fácil com streams, pois se propaga automaticamente para todos os espaços de trabalho que usam esse stream.Também se aplica a quaisquer fluxos herdados do fluxo no qual você especifica os tipos de ignorar.

Você pode editar o stream via p4 stream //stream_depot/stream_name ou clicando com o botão direito no stream na visualização do stream do p4v.

E como observou @svec, a capacidade de especificar arquivos ignorados por espaço de trabalho estará disponível em breve e, de fato, está em P4 2012.1 beta.

Sugestão de Will de usar .p4ignore parece funcionar apenas com o plugin WebSphere Studio (P4WSAD).Eu apenas tentei na minha caixa local do Windows e todos os arquivos e diretórios listados foram não ignorado.

A sugestão de Raven de modificar as especificações do cliente é a maneira correta no Perforce.A organização adequada de seu código/dados/executáveis ​​e arquivos de saída gerados tornará o processo de exclusão de arquivos do check-in muito mais fácil.

Como uma abordagem mais draconiana, você sempre pode escrever um gatilho de envio que rejeitará o envio de listas de alterações se elas contiverem um determinado arquivo ou arquivos com uma determinada extensão, etc.

RESPOSTA HISTÓRICA - não está mais correta.Na época em que isto foi escrito originalmente, era verdade;

Você não pode escrever e fazer check-in de um arquivo que o servidor usará para ignorar regras;padrão geral de arquivo glob ou regexp ignorado forçosamente.

Outras respostas têm configurações globais de servidor globais (e não por pasta).As outras respostas mostram coisas que podem funcionar para você, se você deseja uma linha em sua visualização por pasta vezes o número de extensões que deseja ignorar nessa única pasta, ou que fornecem esse recurso apenas nos plug-ins do WebSphere Studio ou fornecem capacidade para servidor administradores, mas não disponível para usuários.

Resumindo, acho o Perforce muito fraco nesta área.Embora eu aprecie que aqueles que usam o plug-in Eclipse possam usar .p4ignore, e eu acho isso ótimo, deixa aqueles de nós que não o fazem, no escuro.

ATUALIZAR:Consulte a resposta aceita para o novo recurso P4IGNORE adicionado em meados de 2012.

Achei mais fácil reconciliar o trabalho offline usando um script BASH como este:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

Eu adaptei isso de este artigo da base de conhecimento do Perforce.

Também estou procurando uma solução semelhante a .p4ignore (e não uma vinculada a um IDE específico).Até agora, a coisa mais próxima que encontrei foi p4delta.Parece que fará exatamente o que o postador original estava pedindo, embora por meio de outra camada de indireção.

http://p4delta.sourceforge.net

Infelizmente, embora isso pareça produzir a lista adequada de arquivos, não consigo fazer "p4delta --execute" funcionar ("Não é possível modificar uma string congelada") e o projeto não foi atualizado há um ano.Talvez outros tenham mais sorte.

Se você estiver usando o plugin Eclipse Perforce, então a documentação do plugin lista várias maneiras de ignorar arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top