Perforce 트리에서 추적되지 않은 파일을 찾는 방법은 무엇입니까?(svn 상태와 유사)

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

문제

누구든지 추적되지 않은 것을 찾을 수 있는 스크립트나 별칭을 가지고 있습니다(실제로는:추가되지 않은) 파일이 Perforce 트리에 있습니까?

편집하다:P4V가 2009년 1월 릴리스에서 이에 대한 지원을 추가한 것처럼 보이므로 이에 대해 허용된 답변을 업데이트했습니다.

도움이 되었습니까?

해결책

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

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

그러면 약간의 처리가 수행되고 체크아웃되지 않았지만 디포 버전과 다르거나 전혀 체크인되지 않은 파일의 분할 트리 보기가 표시됩니다.그것이 가져오는 몇 가지 다른 카테고리가 있을 수도 있습니다.

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

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

편집하다:아, 구체적으로 스크립트에 관해 묻는 질문이었는데 만일의 경우를 대비해 여기에 답변을 남겨 두겠습니다.

다른 팁

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

유닉스에서:

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

그러면 클라이언트나 Perforce 디포에 추가되지 않은 파일 목록이 인쇄됩니다.나는 사용했다 ! -name '*~' ~로 끝나는 파일을 제외합니다.

아, Perforce의 고전 중 하나입니다 :) 예, 기본 명령에 이를 위한 쉬운 방법이 아직 없다는 것이 정말 짜증납니다.

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

예 : Dir /S /B /AD | P4 -X- 추가

('찾기'를 사용하세요.-nix 명령줄에서 f -print'를 입력하세요.)

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

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

의 유사품이 있습니까? svn status 또는 git status?

네,하지만.

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

허용된 답변과 다른 답변 중 일부에는 중요한 문제가 있다고 생각되므로 답변을 추가해야 한다고 생각합니다.읽기 전용 쿼리 명령과 변경 명령의 차이점을 이해하지 못합니다.

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

---+ 간략한

아마도 Perforce 작업 공간에서 추적되지 않은 모든 파일을 찾는 가장 편리한 방법은 다음과 같습니다. p4 reconcile -na.

-a "저장소에 없는 파일을 주세요. 즉,그건 추가해야지."

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

아마도 오프라인에서 수행된 모든 로컬 변경 사항(추가해야 할 파일뿐만 아니라 삭제해야 할 파일 또는 편집을 위해 열지 않고 변경한 파일)을 찾는 가장 편리한 방법일 것입니다. p4 edit, 이다 p4 reconcile -n.

몇 가지 답변이 스크립트를 제공했으며, 종종 다음과 같은 내용이 포함되었습니다. p4 fstat.해당 스크립트를 모두 확인하지는 않았지만 다음과 같은 Perforce 명령의 결함을 보완하기 위해 유사한 스크립트를 자주 사용합니다. p4 reconcile -n - 예를 들어Perforce 디포 경로나 작업 공간 경로가 아닌 로컬 경로를 원할 때가 종종 있습니다.

---+ 경고

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

p4 status 읽기 전용 쿼리가 아닙니다. p4 status 실제로는 동일한 종류의 변화를 발견합니다. p4 reconcile 그렇게 하고 저장소에 추가합니다. p4 status 없는 것 같다 -n 다음과 같은 드라이런 옵션 p4 reconcile 하다.

만약 당신이 p4 status, 파일을 보고 "아, 그거 필요 없어"라고 생각하세요. p4 revert 동일한 작업 공간에서 계속 편집하려는 경우.아니면 그 변화는 p4 status 변경 세트에 추가된 내용은 다음에 확인됩니다.

사용할 이유가 거의 없거나 전혀 없는 것 같습니다. p4 status 오히려 p4 reconcile -n, 단, 로컬 작업공간과 저장소 경로 이름에 대한 일부 세부 정보는 제외됩니다.

읽기 전용이 아닌 명령에 대해 '상태'를 선택한 사람은 누구나 영어 및 기타 버전 제어 도구에 대한 제한된 명령을 가지고 있다고 상상할 수 있습니다.

---+ P4V GUI

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

저장소(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:

"디렉토리 /S /B /A-D"는 이 폴더 또는 그 아래에 있는 모든 파일을 나열합니다(/에스) "기본" 형식(/비) 디렉터리 제외(/기원 후)."sed" 위험한 문자를 자신의 "로 변경합니다.%더블 엑스" 형식(HTML) 및 "p4는" 명령은 이 목록을 확인합니다("-엑스-") 서버가 저장소("1>널:").결과는 다음과 같은 여러 줄입니다.

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

그럼 짜잔!

또는 P4Win에서 왼쪽 보기 패널의 ""저장소에 없는 로컬 파일" 옵션을 사용하십시오.

저는 P4V를 많이 사용하지 않지만 Workspace 보기 tab.p4 help fstat의 필터 드롭다운에서 "Hide Local Workspace Files"를 선택하는 것과 동등한 것이라고 생각합니다.

P4V 2015.1에서는 다음과 같은 필터 버튼 아래에 이러한 옵션이 있습니다.enter image description here

퀵 앤 더티:p4v에서 문제의 폴더를 마우스 오른쪽 버튼으로 클릭하고 그 아래의 모든 파일을 새 변경 목록에 추가합니다.이제 변경 목록에는 현재 디포의 일부가 아닌 모든 파일이 포함됩니다.

다음 명령은 상태와 유사한 출력을 생성하지만 다음 명령과 완전히 동일한 것은 없습니다. svn status 또는 git status, 각 파일의 상태에 대한 한 줄 요약 제공:

  • p4 status
  • p4 opened
  • p4 diff -ds

의견을 제시할 평판 포인트가 충분하지 않지만 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"

===잭

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

그만큼 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).

저는 Linux, Mac 또는 Windows에서 작동할 수 있는 무언가가 필요했습니다.그래서 나는 그것을 위해 Python 스크립트를 작성했습니다.기본 아이디어는 파일을 반복하고 실행하는 것입니다. p4 fstat 각각.(물론 종속성과 tmp 폴더는 무시합니다)

여기에서 찾을 수 있습니다: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top