Perforce Trigger 설정

Perforce Trigger?

퍼포스 시스템에서 변경사항을 서밋하거나 changelist가 생성될 때 등
이벤트에 따라 스크립트를 실행시켜 여러가지 커스터마이즈할 수 있는 기능입니다.

https://www.perforce.com/manuals/p4sag/Content/P4SAG/chapter.scripting.triggers.html

가이드 문서는 서버 관리자 가이드 문서로 써있는데 개발환경 개선을 해볼 수 있는 여지가 많은 시스템입니다.
한국어 문서가 많지 않아 이번에 포스트를 작성해보게 되었어요. 😎

준비물 / Pre-requisite

  • 당연하지만 Perforce(P4V)가 설치되어있어야합니다.
  • Perforce 관리자 계정(Admin)이 있어야합니다.
    • 관리자 계정이 아니면 ‘You don’t have permission for this operation.’ 라는 오류를 만납니다.
  • Perforce 서버(P4D)가 동작하고 있는 환경에 실행하고자하는 스크립트 프로그램이 설치되어있어야합니다.
    • Python, Node, Perl, Ruby 등

트리거 설정하기

Trigger 설정을 시작하는 방법은 간단합니다.
p4 로그인이 된 상태에서 cmd(또는 터미널)에서 p4 triggers 커맨드로 트리거 관리 파일을 수정합니다.
수정 후 저장하면 트리거 설정 완료! 자세한 것은 아래에서 더 다뤄볼게요.

p4 triggers 실행

p4 triggers를 실행하면 컴퓨터에 설정한 텍스트 수정 프로그램으로 트리거 설정 파일이 열립니다.
아래와 같은 내용을 보실 수 있을거에요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Perforce Submit and Form Validating Trigger Specifications.
#
# Triggers: a list of triggers; one per line. Each trigger line must be
# indented with spaces or tabs in the form. Each line has four
# elements:
#
# Name: The name of the trigger.
#
# Type: 'archive' external archive access triggers
# 'bgtask ' server-side user processes
# 'auth-check' check authentication trigger
# 'auth-check-sso' sso check authentication trigger
# 'auth-set' set authentication trigger
# 'change-submit' pre-submit triggers
# 'change-content' modify content submit triggers
# 'change-commit' post-submit triggers
# ...
#
# For example,
#
# Triggers:
# cscheck change-submit //depot/... "cmd %changelist%"
# no-oblits command pre-user-obliterate fail
# mkspec form-out client "%quote%//trig/scr.pl%quote%"
# daily_verify bgtask unset "verify.pl"
#
# See 'p4 help triggers' for more information about triggers.

Triggers:
submit_data_hook_Test change-commit //Test/... "C:\Program Files (x86)\Python38-32\python %//Test/mainline/Tool/P4Triggers/submit_data_hooks.py% %change%"

파일에는 트리거에 대한 설명 주석과 이벤트 타입, 트리거 예시가 있습니다.
제가 설정한 트리거는 아래 4개 정도를 사용하고 있고 모두 change-commit 이벤트를 트리거하고 있습니다.

설정할 트리거 이벤트 고르기

앞서 파일에서 보실 수 있듯이 트리거할 수 있는 이벤트가 많습니다.
하나하나 알아보기에는 많아서 저는 어떤 것들을 사용하는지 + 가이드 문서를 공유해드릴게요.

가이드 문서: https://www.perforce.com/manuals/p4sag/Content/P4SAG/chapter.scripting.triggers.html

포스트 시작할때에도 공유드렸던 가이드 문서인데 하위에 submit, populate, push, fetch 등의 이벤트에 대한 정의를 보실 수 있습니다. 예시도 같이 있으니 참고하면 좋을 것 같습니다.

제가 설정한 트리거를 설명드리면, 주로 change-commit 이벤트를 트리거에 사용하고 있습니다.
change-commit은 changelist가 서버에 커밋되어 저장될 경우 트리거되는 이벤트입니다.

상세 설명: change-commit trigger guide Perforce guide docs

change-commit 이벤트 외에도 changelist 만들때 description 템플릿 폼 적용을 위해 form-out 이벤트를 사용해서 만들 수도 있습니다.

form-out trigger guide: Perforce guide docs
가이드 문서에서는 기본 클라이언트 워크스페이스 뷰를 설정하는 스크립트를 다뤘네요.

스크립트 작성

Submit event trigger 문서 가이드 문서 예시로는 쉘스크립트로 “체인지리스트가 서밋될 경우 파일을 수정했던 사용자들에게 이메일로 수정 사항을 공유”하는 스크립트를 보여주고 있네요.

python, node, perl 등 그 외의 스크립트를 사용하고자할 경우, 프로그램 경로를 잘 맞춰서 설정할 수 있습니다.
제가 사용하고 있는 스크립트는 요렇게 생겼습니다.
스크립트 목적은 작업된 changelist 내역이 슬랙 채널 통해서 공유되도록 하는 것입니다.

자세한 내용은 위 스크립트를 참고해보세요 😁

이벤트에 맞는 스크립트 설정

change-commit(서밋 완료) 이벤트에 맞춰 스크립트가 실행되도록 트리거를 설정해보았습니다.
이벤트 트리거가 발생되어 스크립트를 실행할 수 있도록 프로그램 경로 + 스크립트 + 파라미터 를 아래와 같이 입력합니다.

  1. 프로그램 경로는 P4D 실행되고 있는 경로에서 프로그램이 설치된 경로를 입력
  2. 스크립트 경로는 보통 Perforce에서 스크립트를 관리하니 경로에 맞춰 입력
  3. 필요한 파라미터를 입력해줍니다.
    1. 필요한 파라미터는 trigger variable 에서 각 이벤트별 사용할 수 있는 파라미터를 확인할 수 있습니다.
1
2
3
# p4 triggers comments ...
Triggers:
submit_data_hook_Test change-commit //Test/... "C:\Program Files (x86)\Python38-32\python %//Test/mainline/Tool/P4Triggers/submit_data_hooks.py% %change%"

설정 완료!

위와 같이 트리거 설정 파일을 수정, 저장하고나면 트리거 설정을 완료됩니다.

트리거 설정 소개 마무리

설정과 관련해서 간단하게 소개해보았고 제가 설정해서 사용하고 있는 스크립트도 공유드려보았습니다. 간단하게 수정된 사항이 발생할 경우 슬랙으로 정보를 공유하는 방식은 응용할 것이 많아보이니 참고해서 설정해보시면 좋을 것 같네요. 💪

Perforce(P4V) 파일 수정부터 submit까지

들어가며

Perforce Client(P4V) basics

앞선 Perforce 베이직 포스트에서는 P4V 클라이언트에서 기본적인 뷰의 구성이나 기능들을 확인해보았습니다.
이번 포스트에서는 워크스페이스를 구성하고 파일을 Submit하고 Depot에 잘 반영되었는지 확인하는 과정을 살펴보려해요.

준비 사항

파일 수정 및 submit 전에 작업할 워크스페이스를 설정해주세요.
우선 P4V를 실행합니다.

P4V 실행시 맨처음에 나오는 Open Connection 화면
계정 생성 팝업
  1. Server는 사용하고자하는 Perforce 서버 주소를 입력합니다.
  2. User는 로그인하고자하는 사용자 ID를 입력합니다.
    1. 사용자 ID는 Open Connection 창에서도 새로 만들 수 있을 수 있지만,
    2. 사내 계정 서비스 또는 LDAP 등으로 계정 관리가 되고 있다는 가정하에 ID를 입력하겠습니다.
  3. Workspace는 New를 눌러서 새로운 워크스페이스를 만들어보겠습니다.

Workspace 만들기

Workspace New
Stream Browse 팝업
  1. 앞선 Open Connection 화면에서 Workspace New 버튼을 클릭합니다.
  2. Workspace 만드는 화면에서 아래의 값들을 입력, 선택합니다.
    1. Workspace name: 워크스페이스 이름을 입력해주세요. 입력한 값에 따라 Workspace root(경로) 값이 맞춰서 변경됩니다.
    2. Workspace root: 워크스페이스 경로입니다. 경로 변경이 필요할 경우 Browse를 통해 경로를 확인하고 변경할 수 있습니다.
    3. Stream: 워크스페이스와 연결할 Stream을 입력합니다. Browse를 통해 스트림을 찾을 수 있고 입력창에서도 자동완성으로 찾을 수 있습니다.
  3. 모두 입력한 뒤에 OK를 누르면 워크스페이스가 생성됩니다.
  4. 다른 워크스페이스를 사용하고자할 경우에는 Workspace Browse를 통해 워크스페이스 리스트를 확인할 수 있습니다.
  5. 워크스페이스가 생성이 완료되었습니다! 🎉

Workspace로 가서 작업을 시작해보죠!

이제 워크스페이스도 만들었으니 작업하러 들어가보겠습니다.
처음에 들어가면 아래와 같은 화면을 볼 수 있을거에요. (상세한 탭 구성은 저와 살짝 다를 수 있습니다 😈 )

Workspace 만들자마자의 상태
Get Latest 후의 상태

왼쪽에 있는 Depot, Workspace 뷰에 작업할 파일 목록이 보여야하는데 처음에는 보이지 않을겁니다.
아직 워크스페이스와 연결된 depot 스트림에서 데이터를 동기화하지 않았기 때문이죠.
Get Latest를 눌러서 최신화를 해보면 파일들이 최신 데이터 상태로 동기화될겁니다.

Get Latest를 하면 오른쪽 이미지 처럼 폴더 내에 파일이 생긴 것을 확인하실 수 있습니다.
(설마 Get Latest를 하고 있는데 Perforce 서버가 죽거나 다른 분이 파일을 다 삭제하지 않았다면요 🤡 )

파일 작업을 하려면 Perforce에서는 Check Out하고 작업을 시작해야합니다.
(Check Out을 하지 않고 작업을 시작할 경우 각 OS 파일 시스템에서는 파일 잠금을 해제하라고 경고창이 나올거에요.)

Code 파일(Non Exclusive File) 작업

체크아웃 후 파일 오픈!
체크아웃 후 파일이 열린 모습

코드, 텍스트 파일 혹은 Non Exclusive 파일 작업의 경우, Check Out 후 바로 작업할 수 있습니다.
Check Out and Open을 눌러주시고 중간에 Select Pending Changelist 창에서 Changelist를 생성합니다.
(이미 작업중인 Changelist에도 추가할 수 있으나 처음 작업한다는 가정하에 Changelist 생성해보겠습니다.)

default Changelist 생성 후 파일이 열립니다. 파일을 수정하고 저장해보았습니다.
Pending 탭에 있는 빨간색 세모 아이콘이 있는 default Changelist에 파일이 있을거에요.

그전에 작업된 리비전과 비교하기
P4Merge에서 변경된 사항 확인하기

파일 항목에서 마우스 오른쪽 클릭 후 “Diff against have revision”을 해보면 현재 가지고 Revision과 아직 반영하지 않은 수정한 내역의 변경 사항을 확인할 수 있습니다.
(P4V와 함께 사용되는 P4Merge가 실행될겁니다. P4Merge가 없다면 설치하거나 다른 IDE를 통해서 볼 수 있어요.)

수정한 파일 내용이 문제가 없는 것을 확인했다면 실제 스트림에 반영하기 위해 Changelist를 Submit 합니다.

Submit!
Description을 채워주세요
  1. Pending Changelist 항목에서 마우스 오른쪽 클릭 후 Submit을 선택합니다.
  2. Submit Changelist 창에서 Changelist 설명(Description) 항목에 값을 입력합니다.
    1. 설명에는 작업에 대한 상세 내용과 ITS(jira, redmine 등)를 사용한다면 issue 키를 입력합니다.
    2. Perforce job을 사용한다면 job을 입력하기도합니다.
  3. 모든 값이 잘 입력되어있다면 Submit!
  4. 변경사항(Changelist)이 잘 제출되었는지는 History 또는 Submitted 탭에서 확인할 수 있습니다.

Asset 파일(Exclusive File) 작업

앞서 코드, 텍스트 파일은 Non Exclusive 파일이어서 체크아웃 후 바로 작업가능한 것으로 말씀드렸습니다.
주로 이미지 파일이나 게임 개발시 사용하는 머터리얼 애셋 등은 대부분의 경우 Exclusive로 설정되어있습니다.

Exclusive로 설정되어있을 경우 내가 작업하고자 A.png 파일을 체크아웃 할 경우,
다른 사람은 내가 체크아웃을 해제할 때까지 A.png 파일을 사용할 수 없습니다.

이미지 파일 또는 애셋 파일들은 여러 사람이 동시 작업할 경우 변경 사항의 컨플릭트를 해결하기 어렵기에
동시 작업을 할 수 없도록 약속을 만들었다고 이해하시면 좋을 것 같습니다.
(SVN, Git lfs에도 있는 파일 Lock 기능입니다.)

작업할 이미지 파일이 Lock된 상태
이미 누군가 파일을 체크아웃했다고 합니다
  • pineoc_main3(user1)에서 test1.png 파일을 수정하기 위해 test1.png를 체크아웃합니다.
  • pineoc_main(user2)에서도 test1.png 파일을 수정하려고했더니 이미 Lock이 되어있어서 체크아웃할 수 없습니다.
  • pineoc_main3(user1)에서 작업이 끝나고 Lock이 풀려야 pineoc_main(user2)에서 작업이 가능합니다.

위 경우는 동일한 사용자의 워크스페이스 뿐만 아니라 다른 사용자의 워크스페이스에서도 체크아웃이 이뤄지면 파일은 잠기게됩니다 (Lock).

이후 작업을 완료하고 Submit하는 과정은 텍스트 수정 작업과 동일합니다.

작업된 Changelist 확인하기

워크스페이스에서 체크아웃, 파일 수정, 서밋까지 했으니 잘 반영되었는지 확인해보겠습니다.
보통은 작업 후 잘 반영되었는지 History탭에서 Revision을 확인해봅니다.

왼쪽은 워크스페이스에서의 History, 오른쪽은 리모트 depot 스트림의 History입니다.

Workspace History
Remote Depot History

서밋한 내용이 정확히 반영되었는지 보고 싶다면 해당 리비전에 마우스 오른쪽 클릭 후 diff를 이용해 확인해볼 수 있습니다.
(이미지도 어떤 변경이 있었는지 알 수 있지만 다른 바이너리 파일들은 안됩니다.)

마무리

이렇게 워크스페이스 생성부터 파일 서밋까지 간단하게 정리해보았습니다.
Perforce를 사용하는 곳이 많지 않다보니 하나하나 가이드 문서가 소중한 느낌이긴하네요. 조금조금 팁이 생길 때 마다 포스트 남겨보겠습니다.
이 문서가 하시는 업무에 도움이 되기를 바랍니다. 🙇‍♂️

다른 Perforce 가이드 문서들

Perforce(P4V) Stream(스트림)

Perforce Stream(스트림)?

지난 포스트에서 작업공간(workspace)를 살펴보았는데요. Perforce(P4V) Workspace(작업공간) 관리
이번에는 작업공간과 연결되는 서버 쪽 작업공간, 스트림을 살펴보겠습니다.
(작업공간보다는 브랜치가 더 익숙한 것 같긴합니다 😸)

가이드 문서: perforce - about streams

Stream Depot

Git에서 저장소(Repository)와 같은 역할을 하는 Depot입니다.
Depot 내에는 많은 스트림들이 있고 여러 유형의 스트림이 있습니다.

스트림 유형(Stream types)

  • Mainline: 최상위 스트림으로 메인 브랜치로 볼 수 있습니다.
  • Release: 안정적인 소스 상태로 관리하기 위한 스트림으로 주로 안정적인 릴리스를 준비하기 위해 사용하는 스트림입니다.
  • Development: 개발이 이뤄지는 피쳐 스트림입니다.
  • Task: 작은 단위의 작업을 할 때 사용할 수 있는 특수한 스트림입니다. 자세한 내용은 링크를 참고하세요.
  • Virtual: 특정 인원에게 제한된 뷰를 제공하기 위한 스트림입니다. 자세한 내용은 링크를 참고하세요.

스트림 그래프(Stream Graph)

스트림 그래프를 보면 스트림간의 부모-자식(Parent-child) 관계를 설정할 수 있다는 것을 알 수 있습니다.
이 관계에 따라 코드의 변경 사항을 전파할 수 있습니다. (rebase, merge할 수 있다는 이야기입니다.)

그래프 방향에 맞춰서 머지 다운(merge down), 카피 업(copy up)이라는 액션을 통해 소스를 머지, 리베이스합니다.
가이드 문서에서는 Propagation(전파)라고 표현하고 있습니다.

이 전파 방식의 목표는 안정적이지 않은 스트림을 보다 안정적인 부모 또는 자식으로 최신 상태를 유지하여
변경 사항이 덜 안정적인 스트림에서 보다 안정적인 스트림으로 전파될 때 덮어쓰지 않도록 하는 것입니다.

가이드 문서에 있는 내용을 가져왔더니 좀 어렵게 설명이 되었네요. 😢
스트림을 안정적으로 만들고 유지하는 것을 계층으로 전파하는 방식을 통해 이뤄질 수 있도록 했다” 정도로 이해하면 될 것 같습니다.

그래프에 있는 이미지를 짧게 살펴보면,

  • rel1 : 릴리스 타입의 스트림으로 main1을 통해 머지 다운, 카피업 (전파)합니다
  • main1 : 메인라인 타입의 스트림으로 rel1과 전파할 수 있으며 dev1, dev2과 통신(전파)할 수 있습니다.
  • dev1, dev2 : 각각 개발 타입의 스트림으로 main1과 전파하며 각자 dev11, dev22와 전파할 수 있습니다.
  • dev11, dev22 : 개발 스트림의 개발 스트림으로 main1에는 직접 전파하지 못하고 dev1, dev2를 통해 전파할 수 있습니다.

여기서 각 스트림 노드에 회색이냐, 파란띠가 둘러져있냐는 부모 스트림 상속(Inherit) 유무를 뜻합니다.
파란띠는 noinherit 으로 상속하지 않았다는 표시, 회색 노드는 상속했다는 표시입니다.

상속한 경우 부모 파일을 공유하거나 다른 경로에 맵핑할 수 있습니다. 자세한 내용은 스트림 뷰 설정에서 확인할 수 있습니다.
(스트림 뷰 설정도 내용이 많아서 따로 정리해서 공유하겠습니다.)

스트림 정리!

짧게 살펴본 스트림 정리해보겠습니다.

  1. Perforce에는 Depot(저장소) 하위에 스트림들이 있습니다.
  2. 스트림은 git에서 브랜치 와 비슷한 친구로 이해할 수 있습니다.
  3. 스트림은 계층 구조를 가질 수 있고 여러가지 타입으로 설정할 수 있습니다.
  4. 스트림 간의 코드 전파는 git 브랜치와 다르게 머지 다운, 카피 업과 같은 액션으로 코드를 머지하고 싱크합니다.

스트림 정리는 이만 마치고 다음 포스트에서 스트림 뷰 설정과 상속에 대해 공부하고 정리해보겠습니다. 😸

다른 Perforce 가이드 문서들

Perforce(P4V) Time lapse 기능

Time-lapse(타입 랩스) 기능?

P4V에는 파일의 변경 내역을 Slider를 이용해서 리비전, 체인지리스트 단위로 볼 수 있는 타입 랩스 기능이 있습니다.

타임랩스 기능을 보는 방법은 간단합니다. 파일에서 오른쪽 버튼을 누르고 Time-lapse View를 누르면 확인하실 수 있습니다.
위 화면은 Time-lapse view의 Single revision 모드의 화면입니다. 파일 리비전 단위로 슬라이드를 움직여 히스토리가 변경되는 것을 볼 수 있습니다.

아래에 있는 내용은 가이드 문서에 있는 Toolbar 설명 테이블 내용을 간단히 정리해보았습니다.

타임랩스 뷰 메뉴 설명

FunctionsDescriptions
Mode얼마나 많은 리비전을 보여줄지 결정하는 옵션입니다.
- Single revision: 한번에 하나의 리비전을 보여줍니다.
- Incremental diffs: 2개의 인접한 리비전의 변경된 것을 강조해서 보여줍니다.
- Multiple revisions: 특정 범위 리비전의 변경된 것을 강조해서 보여줍니다.
Content range시작과 끝 리비전을 정의합니다.
Scale시점 단위를 체인지리스트로 볼 것인지, 날짜, 리비전으로 볼 것인지 정의합니다.
User 수정한 유저를 보여줍니다.
Aging 수정 사항이 얼마나 오래되었는지 색으로 보여줍니다.
Line numbers 줄 번호를 보여줍니다.
Lifetimes 파일에 인접한 텍스트 청크가 얼마나 오래 같이 있었는지 그래픽 너비(width)를 통해 수명을 보여줍니다.
Direct history 브랜치 히스토리를 제외하고 파일 리비전 히스토리를 보여줍니다.
Branch history 브랜치 히스토리(머지, 인테그레이션)를 보여줍니다. 브랜치 정보는 타임라인 밑에 나타납니다.
Originating changelist 각 리비전의 원래 체인지리스트에 대한 정보를 보여줍니다.
Find 파일에서 텍스트 기반으로 검색한 결과를 보여줍니다.
Go to line number 지금 보이는 코드 라인을 지정해서 봅니다.
Go to Next diff 다음 변경 사항
Go to Previous diff 이전 변경 사항
Line ending 줄바꿈 관련 설정

Incremental diffs mode

Incremental diffs 모드는 인접해있는 2개의 리비전의 변화를 볼 수 있는 모드입니다.
현재 리비전과 직전의 리비전의 차이와 어떤 것이 변경되었는지 빠르게 볼 수 있을 것 같네요.
2개의 리비전 정보도 같이 볼 수 있어서 변경 사항을 파악하는데 유용해보입니다.

Multiple revisions mode

이 모드는 설정한 범위 내의 리비전 변화를 볼 수 있습니다.
특정 범위 내에서 변경 사항을 확인하고 어떤 사람이 어떤 변경을 했는지 집중해서 확인하기에 좋을 것 같네요.

이미지 타임랩스 뷰

이미지의 경우 타임랩스 뷰를 통해 변화되는 것을 볼 수 있습니다.

https://www.perforce.com/manuals/p4v/Content/P4V/advanced_files.timelapse_image.html

가이드 문서나 비디오에서도 기능에 대한 스크린샷이 없네요. 😂
실제 테스트 해보니 이미지 변화를 페이드인/아웃해서 보여줍니다. (이미지가 크면 메모리 많이 먹겠다는 생각이 드네요 ㅎㅎ)
어지간한 이미지 파일 형식은 다 지원하는 것 같습니다.

타입랩스 뷰 소개 마무리

타임랩스 뷰 기능에 대해 간단히 살펴보았습니다.
코드 변경된 내용을 확인하는 데에는 좋은 것 같은데 언어에 따라 포맷팅해주지는 못하는 것 같아 아쉽긴하네요. (P4V 기능 대부분 그런 것 같긴하지만 말이죠 😂)

이만 포스트 마칩니다.

Perforce(P4V) Revision Graph(리비전 그래프) 기능

P4V 리비전 그래프 기능

P4V User Guide: Viewing codeline history in the revision graph

P4V의 리비전 그래프 기능은 파일이 어떻게 변경되어왔는지 한눈에 볼 수 있는 기능입니다.
리비전 그래프 기능은 파일이나 폴더를 선택하고 오른쪽 버튼으로 Revision graph를 선택하면 볼 수 있습니다.
단축키는 Mac은 Cmd + Shift + r / Windows는 Ctrl + Shift + r 입니다.

리비전 그래프에서 그래프 선의 의미

리비전 그래프에서 각 리비전 블록과 화살표를 보실 수 있을텐데요.
각 화살표의 의미는 리비전 그래프 오른쪽 하단의 Legend에서 확인하실 수 있습니다.

Legend에서 보실 수 있듯이 색과 선의 형태에 따라 의미하는 것이 다르네요.

저도 정리하면서 어렴풋이 알던 내용을 정리한 느낌이라 좋군요. 😸

Branch, Merge, Edit 등 내용은 이름만 봐도 알 수 있을 것 같으니 이런 것이 있다 정도로 보고 넘어가겠습니다.

리비전 그래프 기능 상세

리비전 그래프에서는 리비전 상세 내용에서 어떤 Integration에 의해 생성된 리비전인지, Label이 있는지, 코드 수정 사항이라면 짧게 Preview도 볼 수 있습니다.

  • Details - 리비전의 상세 내용을 알 수 있습니다. 서밋 날짜, changelist, 설명 등이 포함되어있습니다.
  • Integrations - 리비전이 어떤 Integration에 의해 만들어졌는지 알 수 있습니다. (그냥 서밋이면 해당 항목은 보이지 않습니다.)
  • Labels - 해당 리비전에 설정된 레이블을 보여줍니다.
  • Preview - 파일의 프리뷰를 보여줍니다. 파일이 크거나 바이너리일 경우에는 볼 수 없습니다.

마무리

리비전 그래프를 볼 수 있다는 점에서 소스트리 커밋 그래프와 비슷하지만 파일 단위의 히스토리 그래프를 볼 수 있다는 점에서 특장점이 있는 것 같습니다.
파일이 어떻게 머지되고 브랜치에 포함되었는지 볼 수 있어서 편리한 기능이라고 생각합니다.
리비전 그래프 기능 자체가 직관적이라 간단하게 소개해도 내용은 충분했을 것 같네요.
다음에는 타임 랩스 기능을 포스트해보겠습니다.