Can you “ignore” a file in Perforce?

后端 未结 10 498
被撕碎了的回忆
被撕碎了的回忆 2020-11-29 19:35

I sometimes use the feature \'Reconcile Offline Work...\' found in Perforce\'s P4V IDE to sync up any files that I have been working on while disconnected from the P4 depot.

相关标签:
10条回答
  • 2020-11-29 19:56

    Will's suggestion of using .p4ignore only seems to work with the WebSphere Studio (P4WSAD) plugin. I just tried it on my local windows box and any files and directories that I listed were not ignored.

    Raven's suggestion of modifying your client spec is the correct way under Perforce. Proper organization of your code/data/executables and generated output files will make the process of excluding files from being checked in much easier.

    As a more draconian approach, you can always write a submit trigger which will reject submission of change-lists if they contain a certain file or files with a certain extension, etc.

    0 讨论(0)
  • 2020-11-29 20:00

    I have found it easiest to reconcile offline work using a BASH script like this one:

    #!/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)'
    

    I adapted this from this Perforce Knowledge Base article.

    0 讨论(0)
  • 2020-11-29 20:02

    Yes, But.

    Perforce version 2012.1 added a feature known as p4ignore, inspired by Git. However the Perforce developers made a change to the behaviour, without justification, that happens to make the feature a lot less useful.

    Whilst Git takes rules from all .gitignore files, Perforce doesn't know where to look until you specify a filename in an environment variable P4IGNORE. This freedom is a curse. You can't hack on two repositories that use different names for their ignore files.

    Also, Perforce's ignore feature doesn't work out the box. You can set it up easily enough for yourself, but others don't benefit unless they explicitly opt-in. A contributor who hasn't may accidentally commit unwelcome files (eg. a bin folder created by a build script).

    Git's ignore feature is great because it works out the box. If the .gitignore files are added to the repository (everyone does this), they'll work out the box for everyone. No-one will accidentally publish their private key.

    Amusingly, the Perforce docs shows '.p4ignore' as an example ignore rule, which is backwards! If the rules are useful, they should be shared as part of the repository.


    Perforce could still make good on the feature. Choose a convention for the file names, say p4ignore.txt, so the feature works out the box. Drop the P4IGNORE environment variable, it's counterproductive. Edit the docs, to encourage developers to share useful rules. Let users write personal rules in a file in their home folder, as Git does.

    If you know anyone at Perforce, please email them this post.

    0 讨论(0)
  • 2020-11-29 20:04

    As of version 2012.1, Perforce supports the P4IGNORE environment variable. I updated my answer to this question about ignoring directories with an explanation of how it works. Then I noticed this answer, which is now superfluous I guess.


    Assuming you have a client named "CLIENT", a directory named "foo" (located at your project root), and you wish to ignore all .dll files in that directory tree, you can add the following lines to your workspace view to accomplish this:

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

    The first line removes them from the directory "foo" and the second line removes them from all sub directories. Now, when you 'Reconcile Offline Work...', all the .dll files will be moved into "Excluded Files" folders at the bottom of the folder diff display. They will be out of your way, but can still view and manipulate them if you really need to.

    You can also do it another way, which will reduce your "Excluded Files" folder to just one, but you won't be able to manipulate any of the files it contains because the path will be corrupt (but if you just want them out of your way, it doesn't matter).

    -//depot/foo.../*.dll //CLIENT/foo.../*.dll
    
    0 讨论(0)
提交回复
热议问题