Perforce에서 파일을 "무시"할 수 있습니까?


101

가끔 Perforce의 P4V IDE에있는 '오프라인 작업 조정 ...'기능을 사용하여 P4 저장소에서 연결이 끊어진 동안 작업 한 모든 파일을 동기화합니다. '폴더 차이'를 수행하는 다른 창을 시작합니다.

소스 제어에 체크인하고 싶지 않은 파일이 있습니다 (예 : DLL, 코드 생성 출력 등과 같은 bin 폴더에있는 파일). 이러한 파일 / 폴더가 "새"로 표시되지 않도록 필터링하는 방법이 있습니까? 추가되었습니다. 실제로 관심이있는 파일 목록을 복잡하게 만드는 경향이 있습니다. P4에는 Subversion의 '파일 무시'기능과 동일한 기능이 있습니까?


CVS 출력의 예를 제공하여 귀하가 의미하는 바를 알 수 있으며 주어진 답변이 원하는대로 수행되지 않는 이유를 알 수 있습니까?
Greg Whitfield

2
Perforce의 아이디어 포럼에서 Git 스타일 무시 목록에 대한 제안에 투표 할 수 있습니다. p4ideax.com/ideas/15/ignore-support
Colonel Panic

"오프라인 작업 조정"을 누르고 "저장소에없는 로컬 파일"을 선택 취소 한 다음 "조정"을 누릅니다. 파일을 추가하지 않는 한 가장 빠른 해결 방법 일 것입니다.
레인

답변:


59

2012.1 버전부터 Perforce는 P4IGNORE환경 변수를 지원합니다 . 나는 그것이 어떻게 작동하는지에 대한 설명과 함께 디렉토리 무시에 관한이 질문에 대한 나의 대답을 업데이트 했습니다. 그런 다음 나는이 대답을 발견했습니다. 이제는 불필요한 것 같습니다.


"CLIENT"라는 클라이언트, "foo"라는 디렉터리 (프로젝트 루트에 있음)가 있고 해당 디렉터리 트리의 모든 .dll 파일을 무시하려는 경우 작업 영역보기에 다음 줄을 추가하여 수행 할 수 있습니다. 이:

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

첫 번째 줄은 "foo"디렉터리에서 제거하고 두 번째 줄에서는 모든 하위 디렉터리에서 제거합니다. 이제 '오프라인 작업 조정 ...'시 모든 .dll 파일이 폴더 diff 표시 하단에있는 "제외 된 파일"폴더로 이동됩니다. 그들은 당신의 방해가 될 것이지만 당신이 정말로 필요하다면 여전히 그들을보고 조작 할 수 있습니다.

다른 방법으로도 "Excluded Files"폴더를 하나로 줄일 수 있지만 경로가 손상되기 때문에 포함 된 파일을 조작 할 수 없습니다. 당신의 방식대로, 그것은 중요하지 않습니다).

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

30
이것이 작동하는 동안, 당신이 만든 모든 작업 공간에이 줄을 넣어야하기 때문에 그다지 유용하지 않습니다.
dgrant 2009

6
참고 : p4v의 일반 조정 오프라인 작업에는 작동하지 않습니다. "제외 된 파일"이 "고급"조정 창에만있는 것 같습니다 ...
Catskul

6
제외 필터는 Reconcile Offline Work대화 상자 내에서 작동하지 않습니다 . 내부에서 열면 작동 Advanced Reconcile...하지만 99.9 %의 시간 동안 고급 대화 상자를 사용하지 않거나 사용하지 않기 때문에 쓸모가 없습니다.
sorin

12
@raven : 1) (예 :) 일부 프로젝트는 중앙 위치에 두지 않고 각 프로젝트 아래에 bin / obj 폴더를 사용합니다. (일반화 된 결론 :) 모든 중간 파일이 쉽게 제외되는 작업 공간 위치에 배치된다는 Perforce의 가정은 VCS가 작성하는 데 불필요하게 제한적인 설계입니다. 2) 일부 프로젝트에는 디렉터리 구조에 로컬 캐시 및 / 또는 기타 사용자 별 생성 파일이 포함됩니다 (예 : * .ncb IntelliSense 캐시). 이를 공통 정책으로 제외 할 수 없기 때문에 오프라인 작업 조정 및 폴더 차이 기능이 심각하게 손상됩니다.
Sam Harwell

6
이 특별한 문제가 나를 죽이고 있습니다.
Warren P

47

네,하지만.

Perforce 버전 2012.1에는 Git에서 영감을 얻은 p4ignore 라는 기능이 추가되었습니다 . 그러나 Perforce 개발자는 정당한 이유없이 동작을 변경하여 기능을 훨씬 덜 유용하게 만듭니다.

Git은 모든 .gitignore파일 에서 규칙을 가져 오지만 Perforce는 환경 변수에 파일 이름을 지정할 때까지 어디를 찾아야하는지 알지 못합니다 P4IGNORE. 이 자유는 저주입니다. 무시 파일에 다른 이름을 사용하는 두 개의 저장소를 해킹 할 수 없습니다.

또한 Perforce의 무시 기능은 상자에서 작동하지 않습니다. 쉽게 설정할 수 있지만 명시 적으로 선택하지 않는 한 다른 사용자는 혜택을 볼 수 없습니다. 기여자가 실수로 원하지 않는 파일 (예 : bin빌드 스크립트로 만든 폴더)을 커밋 할 수 있습니다 .

Git의 무시 기능은 상자에서 작동하기 때문에 훌륭합니다. 는 IF .gitignore파일 (저장소에 추가되어 모두가이 작업을 수행 ), 그들은 모두를 위해 상자를 해결할 수 있습니다. 아무도 실수로 개인 키를 게시하지 않습니다.

재미있게도 Perforce 문서 는 '.p4ignore'를 무시 규칙의 예로 보여줍니다. 규칙이 유용하면 저장소의 일부로 공유해야합니다.


Perforce는 여전히 기능을 향상시킬 수 있습니다. 파일 이름에 대한 규칙 (예 :)을 선택 p4ignore.txt하면 기능이 즉시 작동합니다. P4IGNORE환경 변수를 삭제하면 비생산적입니다. 문서를 편집하여 개발자가 유용한 규칙을 공유하도록 장려하십시오. Git처럼 사용자가 홈 폴더의 파일에 개인 규칙을 작성할 있습니다.

Perforce에 아는 사람이 있으면이 게시물을 이메일로 보내주십시오.


2
설명해 주셔서 감사합니다. P4VS와 함께 .p4ignore를 사용해 보았지만 무시해야 할 솔루션이 무시되지 않았습니다. 처음에는 내가 뭔가 잘못하고 있다고 생각했습니다. 이제 더 잘 압니다.
Michael S.

1
@gentlesea, Perforce 2013.1부터 무시 기능이 마침내 그래픽 앱에서 작동합니다.
대령 패닉


1
사용중인 작업 공간에 따라 다른 구성 변수의 경우 P4CONFIG 파일을 사용해보십시오. 그런 다음 작업 공간에서 작업 공간으로 이동할 때 P4CONFIG 파일이 다른 P4IGNORE 값을 지정하도록 할 수 있습니다.
Bryan Pendleton

2
Perforce는 적절한 소프트웨어를 구축하는 방법을 알지 못하며 기본 사항도 얻지 못합니다. 그렇기 때문에 perforce에 갇힌 모든 사람들이 git로 이동하는 것을 꿈꿉니다.
Pavel P

22

이것은 Perforce 2013.1에서 작동하며, 새로운 P4IGNORE 메커니즘은 다음 Perforce 블로그에 설명 된 2012.1 릴리스에서 처음 추가되었습니다.

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

현재 설명 된대로 "P4IGNORE"환경 변수를 무시할 파일 목록이 포함 된 파일 이름으로 설정합니다.

그래서 당신은 그것을 확인하여 당신이 그것을 어떻게 좋아하는지 확인할 수 있습니다.


1
파일 이름뿐만 아니라 디렉토리 이름도 포함 할 수 있습니다.
ashes999

이전에 언급했듯이 불행히도 P4IGNORE를 설정해야합니다.
Technophile

1
@DerMike 링크를 수정했습니다. Perforce가 블로그 URL을 변경 한 것 같습니다.
svec

7

복사 할 필요없이 모든 작업 공간에 적용 할 솔루션을 원한다면 p4 보호 테이블에서 아래와 같은 행을 사용하여 해당 파일 유형의 제출을 ​​거부 할 수 있습니다 (또는 시스템 관리자).

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

이전에이 작업을 수행 한 것을 기억하지만 여기서 테스트하는 데 필요한 권한이 없습니다. 확인 퍼포의 시스템 관리자로부터 안내를 하고 그것을 밖으로 시도


3
불행히도 이로 인해 조정보기를 무시하는 대신 제출시 오류가 발생합니다. 따라서 특정 파일을 저장소에 보관할 수는 있지만 사용자가 노이즈를 보지 않도록 할 수는 없습니다.
Warren P

6

Perforce Streams를 사용하면 2011.1 버전부터 파일을 훨씬 쉽게 무시할 수 있습니다. 문서 에 따르면 디렉토리의 특정 확장자 또는 특정 경로를 무시할 수 있습니다.

에서 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.

이것은 본질적으로 @raven의 대답이 지정한 것을 수행하지만 해당 스트림을 사용하여 모든 작업 공간으로 자동으로 전파되기 때문에 스트림으로 더 쉽게 수행됩니다. 무시 유형을 지정한 스트림에서 상속 된 모든 스트림에도 적용됩니다.

p4 stream //stream_depot/stream_namep4v의 스트림보기에서 스트림을 통해 또는 마우스 오른쪽 버튼으로 스트림을 편집 할 수 있습니다 .

@svec가 언급했듯이 작업 공간 당 파일 무시를 지정하는 기능이 곧 출시 될 예정이며 실제로 P4 2012.1 베타 버전입니다.


예, 팀 전체에서 "무시"설정을 공유 할 수 있습니다 (P4 2013.2 사용). 스트림 지원 저장소에서만 작동합니다. (P4IGNORE = .p4ignore 환경 변수를 팀 전체에 전파 할 수 있다면 아마도 최상의 솔루션 일 것입니다.)
yoyo

1
스트림에 대한 무시 됨 필드는 특정 폴더, 파일 또는 파일 확장자를 무시하는 데 사용할 수 있지만 와일드 카드 지원이 제한되며 전체 폴더를 무시한 다음 특정 파일 또는 하위 폴더를 "무시"할 수있는 방법이 없습니다. (p4 서버 버전 2013.2 기준)
yoyo

3

Will의 사용 제안은 .p4ignoreWebSphere Studio (P4WSAD) 플러그인에서만 작동하는 것 같습니다. 내 로컬 창 상자에서 시도했지만 나열된 파일 및 디렉토리는 무시 되지 않았습니다 .

클라이언트 사양 수정에 대한 Raven의 제안은 Perforce에서 올바른 방법입니다. 코드 / 데이터 / 실행 파일 및 생성 된 출력 파일을 적절히 구성하면 파일을 체크인에서 제외하는 과정이 훨씬 쉬워집니다.

보다 엄격한 접근 방식으로 특정 파일 또는 특정 확장자 등을 가진 파일이 포함 된 경우 변경 목록 제출을 거부하는 제출 트리거를 항상 작성할 수 있습니다.


15
나는 전체 "코드의 적절한 구성 ..."진술에 완전히 동의하지 않습니다. 문제의 사실은 Perforce의 작업 영역 편집 규칙에 따라 모든 사용자가 변경해야한다는 것입니다. 반면 진정한 .p4ignore 파일은 한 번만 생성 / 관리됩니다.
Mike

9
아, 그리고 말할 것도없이, 코드 분기를 좋아합니까? 각 지점에 대한 작업 공간을 유지 관리하십시오. 재미있을 것 같네요!
Mike

2

역사적 답변-더 이상 정확하지 않습니다. 이것은 원래 쓰여진 당시에 사실이었습니다.

서버가 무시 규칙을 만드는 데 사용할 파일을 작성하고 체크인 할 수 없습니다. 일반적인 glob 또는 regexp 파일 패턴은 perforce에서 무시됩니다.

다른 답변에는 글로벌 (폴더 당이 아닌) 글로벌 서버 구성이 있습니다. 다른 답변은 폴더 당 한 줄에 해당 단일 폴더에서 무시하려는 확장 수를 곱하거나 WebSphere Studio 플러그인에서만이 기능을 제공하거나 서버에 대한 기능을 제공하는 경우 사용자에게 적합한 것을 보여줍니다. 관리자이지만 사용자는 사용할 수 없습니다.

요컨대 Perforce가이 분야에서 정말 약하다는 것을 알았습니다. 이클립스 플러그인을 사용하는 사람들이을 사용할 수 있다는 점에 감사하고 .p4ignore, 그것이 훌륭하다고 생각하지만, 그렇지 않은 사람들은 어둠 속에 남겨져 있습니다.

업데이트 : 2012 년 중반에 추가 된 새로운 P4IGNORE 기능에 대한 승인 된 답변을 참조하십시오.


1

다음과 같은 BASH 스크립트를 사용하여 오프라인 작업을 조정하는 것이 가장 쉽다는 것을 알았습니다.

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

이 Perforce 기술 자료 문서 에서 이를 수정했습니다 .


7 년 전 일인데 놀랍지 않습니다. 나는 누군가가 여전히 Perforce를 사용하고 있다는 것에 놀랐습니다.
kevin cline

... 선택하지 않음 : '(
DerMike

0

나는 .p4ignore와 같은 솔루션을 찾고 있습니다 (특정 IDE에 묶여있는 것이 아님). 지금까지 내가 찾은 가장 가까운 것은 p4delta입니다. 다른 간접적 인 레이어를 통해서도 원본 포스터가 요청한대로 정확하게 작동하는 것처럼 들립니다.

http://p4delta.sourceforge.net

불행히도 이것이 적절한 파일 목록을 생성하는 것처럼 보이지만 "p4delta --execute"가 작동하도록 할 수없고 ( "고정 된 문자열을 수정할 수 없음") 프로젝트가 연도에 업데이트되지 않았습니다. 아마도 다른 사람들은 더 나은 행운을 가질 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.