Perforce 트리에서 추적되지 않은 파일을 찾는 방법은 무엇입니까? (svn 상태의 아날로그)


87

Perforce 트리에서 추적되지 않은 (정말 : 추가되지 않은) 파일을 찾을 수있는 스크립트 또는 별칭이있는 사람이 있습니까?

편집 : 2009 년 1 월 릴리스에서 P4V가 이에 대한 지원을 추가 한 것처럼 보이기 때문에 이에 대한 수락 된 답변을 업데이트했습니다.


11
가장 많이 사용되는 기업 SCM 도구에이 기능이없는 이유를 상상할 수 없습니다. 아마도 모든 개발자가 GUI 만 사용하고있을 것입니다.
sorin

3
오, 큰 소리로 외쳐서 !!!! 허용되는 p4 status파일은 추적되지 않은 파일을 찾는 것이 아니라 실제로 추적을 시작합니다. 즉 p4 status, 이름에서 의심하는 것처럼 읽기 전용 쿼리는 아니지만 실제로 작업 공간 파일이 아닌 항목을 변경하는 명령입니다. 이것은 상태 명령이 수행해야하는 작업이 아니며 수행하는 작업 svn status이 아닙니다 . 내가 찾을 수있는 가장 가까운 것은 svn status입니다 p4 reconcile -na- -a는 "실제로 변경 아무것도 할"말 -n "추가해야하는 파일을"말을. /// 원래 훨씬 더 강한 말을했습니다.
Krazy Glew


p4 reconcile와 둘 다 p4 status지옥처럼 느리지 만 git status1-3 초 만에 실행이 완료됩니다.
zwcloud

답변:


81

편집 :p4 status 지금 사용하십시오 . 더 이상 농구를 뛰어 넘을 필요가 없습니다. @ColonelPanic의 답변을 참조하십시오 .

2009 년 1 월 버전의 P4V에서는 작업 공간 트리의 폴더를 마우스 오른쪽 버튼으로 클릭하고 "오프라인 작업 조정 ..."을 클릭 할 수 있습니다.

이렇게하면 약간의 처리가 수행 된 다음 체크 아웃되지 않았지만 저장소 버전과 다르거 나 전혀 체크인되지 않은 파일의 분할 트리보기가 표시됩니다. 다른 몇 가지 범주가 나타날 수도 있습니다.

이보기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 체크 아웃하거나 추가하거나 되돌릴 수도 있습니다.

내 엉덩이를 몇 번 구해준 매우 편리한 도구입니다.

편집 : 아 질문이 스크립트에 대해 구체적으로 물었지만 경우에 대비 하여이 답변을 여기에 남겨 둘 것입니다.


이 질문에 powershell 솔루션을 추가했습니다. stackoverflow.com/questions/3217152/…
tenpn 2010-07-10

이것은 모든 파일을 저장소의 버전과 비교합니까? 큰 저장소와 느린 연결이 있습니다 (재택에서 작업 할 때). 이것은 영원히 걸릴 수 있습니다!
gdw2 2012 년

나는 그것이 완전한 차이라고 생각하지 않지만 빠르지 않습니다.
tenpn

10
오, 큰소리로 울어 주셔서 !!!! p4 status추적되지 않은 파일을 찾는 것이 아니라 실제로 추적을 시작합니다. 즉 p4 status, 이름에서 의심하는 것처럼 읽기 전용 쿼리는 아니지만 실제로 작업 공간 파일이 아닌 항목을 변경하는 명령입니다. 이것은 상태 명령이 수행해야하는 작업이 아니며 수행하는 작업 svn status이 아닙니다 . 내가 찾을 수있는 가장 가까운 것은 svn status입니다 p4 reconcile -na- -a는 "실제로 변경 아무것도 할"말 -n "추가해야하는 파일을"말을. /// 원래 훨씬 더 강한 말을했습니다.
Krazy Glew

1
p4 status기본적으로 p4 reconcile -n. 아마도 당신은 p4 status -A무엇에 대한 동의어 p4 reconcile입니까?
Samwise

50

Linux에서 또는 Windows에 gnu-tools가 설치된 경우 :

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

계정이없는 모든 파일에 대해 오류 메시지가 표시됩니다. 해당 출력을 캡처하려면 다음을 수행하십시오.

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

1
stderr을 stdout으로 리디렉션하면 추가 필터링 또는 기타 작업을 수행 할 수 있습니다. 예를 들어 스크롤 가능한 Java 파일 목록을 보려면 find. 유형 f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ .java'| less
Jon Nadal

2
이것은 60K 파일 작업 공간에서 엄청나게 오래 걸립니다. 10 초 이내에 동일한 작업을 수행하는 파이썬 스크립트를 작성했습니다 : p5 . 또한 .p4ignore추적되지 않은 / 변경된 / 삭제 된 파일을 지원 하고 미리보고 자동으로 편집 할 수 있습니다.
hamstergene 2013 년

@hamstergene, 아주 좋아!
Mark Harrison

관심이있는 사람이 있으면 정확히 수행 하는 작은 스크립트작성 했습니다 (dir 인수, 최대 깊이 인수 및 stdout에 대한 출력 포함).
Arnon Zilca 2015

감사; 나는 이것이 유용하다는 것을 알았다! 이것은 심볼릭 링크 ( find . -type l)를 처리하지 않으며 @또는 %문자 를 포함하기 때문에 강제로 추가 된 P4 파일에 대해 잘못된 출력을 제공 합니다. 그러나 이러한 파일은 소수이므로 이러한 엣지 케이스에 대한 수동 검토가 대부분의 경우 작동합니다.
CJBS

19

Unix에서 :

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

클라이언트 또는 Perforce 저장소에 추가되지 않은 파일 목록이 인쇄됩니다. ! -name '*~'~로 끝나는 파일을 제외 하는 데 사용 했습니다.


12

Ahh, Perforce 고전 중 하나 :) 예, 이것이 기본 명령에 내장 된 쉬운 방법이 아직 없다는 것은 정말 짜증납니다.

가장 쉬운 방법은 명령을 실행하여 클라이언트 루트 아래에있는 모든 파일을 찾은 다음 저장소에 추가하는 것입니다. 모든 새 파일의 변경 목록이 표시되고 기존 파일은 무시됩니다.

예 : dir / s / b / AD | p4 -x-추가

(nix 명령 줄에서 'find. -type f -print'사용).

물리적 목록 (콘솔 또는 파일)을 원하면 diff 결과를 파이프 할 수 있습니다 (또는 변경 목록에서도 원하는 경우 추가).

P4Win 내에서 이것을 실행하는 경우 $ r을 사용하여 현재 작업 공간의 클라이언트 루트를 대체 할 수 있습니다.


11

svn status또는 의 아날로그가 git status있습니까?

예,하지만 .

Perforce 버전 2012.1부터는 명령 p4 status과 P4V '오프라인 작업 조정'이 있습니다. 그러나 둘 다 매우 느립니다. 관련없는 파일을 제외하려면 https://stackoverflow.com/a/13126496/284795에 따라 p4ignore.txt파일 을 작성해야합니다.


1
p4 status2012.1 릴리스 이후 로 몇 가지 성능이 향상 되었습니다. p4 status성능 문제로 인해 멀리 떨어져있는 경우 다시 테스트하여 지금 어떻게 작동하는지 확인하는 것이 좋습니다.
Bryan Pendleton

7

받아 들여진 대답과 다른 일부는 내가 생각하는 중요한 문제가 있기 때문에 대답을 추가해야한다는 충동을 느낍니다. 그들은 읽기 전용 쿼리 명령과 변경하는 명령의 차이점을 이해하지 못합니다.

나는이 답변에 대해 어떤 신용도 기대하지 않지만 다른 사람들이 허용되었지만 IMHO 오답을 따라 시간 낭비와 실수를 피하는 데 도움이되기를 바랍니다.

--- + 간략한

perforce 작업 공간에서 추적되지 않은 모든 파일을 찾는 가장 편리한 방법은 p4 reconcile -na.

-a "저장소에없는 파일, 즉 추가해야하는 파일을주세요"라고 말합니다.

-n"변경하지 마십시오"라고 말합니다. 즉, 드라 이런입니다. (메시지는 "추가를 위해 열림"이라고 말할 수 있지만 정신적으로는 "-n이 아니면 추가를 위해 열릴 것"으로 해석해야합니다.)

추가해야 할 파일뿐만 아니라 삭제해야하거나를 통해 편집하기 위해 열지 않고 변경된 파일을 오프라인에서 수행 한 모든 로컬 변경 사항을 찾는 가장 편리한 방법 p4 editp4 reconcile -n.

몇 가지 답변은 종종 p4 fstat. 이러한 스크립트를 모두 확인하지는 않았지만 종종 유사한 스크립트를 사용하여 다음과 같은 perforce 명령의 결함을 보완합니다. 예를 p4 reconcile -n들어 Perforce 저장소 경로 나 작업 공간 경로가 아닌 로컬 경로를 원하는 경우가 종종 있습니다.

--- + 경고

p4 status 다른 버전 제어 시스템의 상태 명령에 대응하지 않습니다.

p4 status읽기 전용 쿼리가 아닙니다. p4 status실제로 동일한 종류의 변경 사항을 찾아서 p4 reconcile저장소에 추가합니다. 같은 건식 실행 옵션 p4 status이없는 것 같습니다 .-np4 reconcile

그렇다면 p4 status파일을보고 "Oh, I do n't need p4 revertthem "라고 생각 하면 같은 작업 공간에서 계속 편집하려면 파일을 사용해야합니다. 그렇지 않으면 변경 세트에 p4 status추가 된 변경 사항이 다음에 확인됩니다.

로컬 작업 공간 대 저장소 경로 이름의 일부 세부 사항을 제외하고는 p4 status대신 사용할 이유가 거의 또는 전혀없는 것 같습니다 p4 reconcile -n.

읽기 전용이 아닌 명령으로 '상태'를 선택한 사람은 영어 및 기타 버전 제어 도구에 대한 명령이 제한적이라고 생각할 수 있습니다.

--- + P4VGUI

GUI p4v에서 reconcile 명령은 편집을 위해 추가, 삭제 또는 열어야하는 로컬 변경 사항을 찾습니다. 다행히 기본적으로 변경 목록에 추가하지 않습니다. 그러나 변경 사항을 커밋하지 않으려면 검사 후 조정 창을 닫는 데주의해야 할 수도 있습니다.


p4 상태가 파일을 추가하지 않는 것 같습니다. 작동하는 것처럼 보이며 'reconcile -n'으로 문서화되어 있습니다. 당신은 그것이 변화를 확신합니까?
kdubs

4

저장소 (Windows 용)와 다른 작업 공간의 모든 파일을 백업하는 도구에서 다음을 사용합니다. 삽입 된 공백, 별표, 백분율 및 해시 표시와 같이 Perforce가별로 좋아하지 않는 몇 가지 이상한 경우를 처리합니다.

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:

" dir / S / B / AD "는 디렉토리 (/ AD )를 제외하고 "bare"형식 ( / B ) 으로이 폴더 ( / S ) 또는 그 아래에있는 모든 파일을 나열합니다 . " sed "는 위험한 문자를 " % xx "형식 (HTML 형식)으로 변경하고 " p4 have "명령 은 서버 에서이 목록 ( " -x- ")을 확인하여 실제로 저장소에서 찾은 파일에 대한 모든 것을 삭제합니다. ( " 1> NUL : "). 결과는 다음과 같은 여러 줄입니다.

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voilà!


이것은 훌륭한 솔루션이며, 여전히 P4 버전 2015.1 작동
리안 샌더슨

매우 빠릅니다! find / xargs는 메모리가 부족하고 느립니다. .bat 파일에 추가 할 때 %를 두 번 다시 호출하십시오.
kevinf

4

또는 P4Win에서 왼쪽보기 패널의 ""디포에없는 로컬 파일 "옵션을 사용합니다.

P4V를 많이 사용하지는 않지만 작업 공간보기 탭의 필터 드롭 다운에서 "로컬 작업 공간 파일 숨기기"를 선택하는 것이 동일하다고 생각합니다 .p4 help fstat

P4V 2015.1에서는 다음과 같은 필터 버튼 아래에 이러한 옵션이 있습니다. 여기에 이미지 설명 입력


슬프게도 현재 디렉토리 아래의 파일 만 표시됩니다. (
JP P.

2

Quick 'n Dirty : p4v에서 해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 그 아래에있는 모든 파일을 새 변경 목록에 추가합니다. 이제 변경 목록에는 현재 저장소의 일부가 아닌 모든 파일이 포함됩니다.


1

다음 명령은 상태와 같은 출력을 생성하지만, 아무도 꽤 해당하지 않습니다 svn status또는 git status각 파일의 상태를 한 줄 요약을 제공합니다 :

  • p4 status
  • p4 opened
  • p4 diff -ds

0

나는 논평 할 평판 포인트가 충분하지 않지만 Ross의 솔루션은 추가 할 수있는 파일도 나열합니다. 그의 대답을 사용하여 작업 공간을 청소하고 싶지 않을 것입니다 .

다음 용도 p4 fstat(감사 마크 해리슨) 대신에 p4 have, 및 목록 저장소에없는 파일 추가 오픈하지 않습니다.

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"

=== 잭


0

빠른 방법이지만 정통성은 거의 없습니다. 코드베이스가 새 파일을 추가하지 않거나보기를 너무 자주 변경하지 않으면 체크 아웃에서 로컬 'git'저장소를 만들 수 있습니다. 깨끗한 perforce 동기화에서 git init, 모든 파일을 로컬로 추가 및 커밋합니다. Git 상태는 빠르며 이전에 커밋되지 않은 파일을 표시합니다.


0

p4 fstat명령을 사용하면 작업 공간에 파일이 있는지 테스트하고와 결합 find하여 다음 Perl 예제에서와 같이 확인할 파일을 찾을 수 있습니다.

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

또는 사용할 수 있습니다 p4 reconcile -n -m ...

'삭제를 위해 열림'이면 작업 공간에서 제거 된 것입니다. 위의 명령은 미리보기 모드 ( -n) 에서 실행 중입니다 .


1
답변으로 설명없이 일부 코드를 던지지 말고 OP가 코드를 이해하고 무언가를 배울 수 있도록 설명을 추가하십시오. :)
Markus


0

이 명령은 추가, 편집 또는 제거해야하는 파일 목록을 제공 할 수 있습니다.
p4 status -aed ...
별도로 사용할 수도 있습니다.
p4 status -a ...
p4 status -e ...
p4 status -d ...


-1

P4V의 "보기"메뉴 항목에서 "폴더의 파일"을 선택하면 오른쪽 창에 새 탭이 나타납니다. 탭의 맨 오른쪽에는 2 개의 아이콘이있는 "폴더의 파일"이라는 창이 표시되는 작은 아이콘이 있습니다. 깔때기 모양의 왼쪽 아이콘을 선택하면 몇 가지 옵션이 표시됩니다. "디포에없는 항목 표시"를 선택하면 폴더의 모든 파일이 표시됩니다. 그런 다음 추가하려는 파일을 마우스 오른쪽 버튼으로 클릭하고 "Mark for Add ..."를 선택하십시오. "보류 중"탭에서 확인할 수 있습니다. 정상적으로 제출 (Ctrl + S)하십시오.

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