developer tip

git commit 주석을 래핑하는 방법은 무엇입니까?

copycodes 2020. 11. 10. 08:18
반응형

git commit 주석을 래핑하는 방법은 무엇입니까?


을 통해 볼 때 git commit 주석을 래핑하는 방법이 git log있으므로 줄 끝에서 잘리지 않습니까? 아주 간단한 해결책이 있어야 할 것 같지만 하나를 찾을 수 없었습니다.

감사.


2011 편집 : 다른 답변 (upvoted) 은 git에서 사용하는 기본 호출기 인 less 옵션을 수정할 가능성을 강조합니다 .
내 답변 끝에있는 발언은 여전히 ​​유효합니다. 긴 커밋 메시지를 볼 수 있다고해서 말한 (긴) 메시지를 처리해야하는 다른 도구가이를 처리 할 수 ​​있다는 의미는 아닙니다.


커밋 메시지 형식 정책에 대한 원래 답변 (2010 년 1 월) :

이 블로그 에 따르면 git log는 어떤 종류의 래핑도하지 않기 때문에 적절한 줄 길이로 주석 형식을 지정해야합니다.

  • git log커밋 메시지를 특별하게 래핑하지 않습니다.
    기본 페이저 인을 사용하면 less -S단락이 화면 가장자리에서 멀리 떨어져서 읽기가 어려워집니다.
    80 열 터미널에서 왼쪽 들여 쓰기를 위해 4 열을 빼고 오른쪽 대칭을 위해 4 열을 더 빼면 72 열이 남습니다.
  • git format-patch --stdout메시지 본문에 메시지를 사용하여 일련의 커밋을 일련의 이메일로 변환합니다.
    좋은 이메일 네티켓은 우리가 일반 텍스트 이메일을 래핑하여 80 열 터미널에서 오버플로없이 몇 수준의 중첩 된 응답 표시기를위한 공간이 있음을 나타냅니다.

으로는 여기 말했다 :

일반적으로 명령 줄에서 전달하는 대신 편집기를 사용하여 커밋 메시지를 만듭니다. 형식은 다음과 같아야합니다.

  • 72 자로 된 하드 랩
  • 커밋에 대한 짧은 요약
  • 뒤에 하나의 빈 줄이옵니다.
  • 지원 세부 사항에 따라

모든 소스 ( Jörg W Mittag 주석 과 같이 첫 번째 줄에 50 자에 해당하는 GitPro 책 포함 )는 주석을 감싸 야한다고 주장합니다. 왜냐하면 Git이 긴 줄을 처리 할 수 ​​있었음에도 불구하고 처리 체인 (이메일, 패치 등)은 그렇지 않을 수 있습니다.


또는 사용하도록 호출기를 변경할 수 있습니다. less -R

$ git config --global core.pager 'less -R'

이렇게하면 화면 형식을 제어하려는 시도를 중단하는 것이 더 적어집니다 (일반적으로 git log화살표 키를 사용 하는 동안 오른쪽과 왼쪽으로 스크롤 할 수 있음 ). 그리고 덜 매뉴얼에 "따라서 긴 줄이 잘못된 위치로 분할되는 등 다양한 디스플레이 문제가 발생할 수 있습니다."라고 적혀 있습니다. 원하는 것은 주석 작성자가 입력 한 위치 대신 화면 오른쪽 (잘못된 위치)에 줄 끝이 나타나기를 원합니다.

또한 호출기를 수정하지 않고 오른쪽 화살표 키누르면 더 많은 코드를 볼 수 있습니다. 내가 선호하는 방법입니다.


완벽한 방법은없는 것 같습니다. 내가 사용하는 해결 방법은 출력을 more( less또는 cat등) 으로 파이프하는 것입니다 .

git log | more

그것은 적어도 내 시스템에서 긴 줄을 래핑합니다 (그러나 색상 서식을 놓친 경우).


이전 답변에서 언급 한 것은 기본 호출기 (종종 '덜')가 랩핑을 담당하며 기본적으로 일반적으로 긴 줄을 자른다는 것입니다.

커밋 메시지를 변경하지 않고이를 수정하려면 (less 및 bash 예제) :

$ echo $LESS
-FRSX

이것이 기본적으로 LESS 환경 변수를 덮어 쓰는 것입니다.

echo "LESS=-FRX;export LESS" >> ~/.bash_profile
source ~/.bash_profile

-r이 적 으면 (위에서 권장 한대로) 줄 수를 잊는 일이 줄어들고 맨 위 줄이 보이지 않게 스크롤되므로 커밋을 놓칠 수 있습니다! 실제 수정은 LESS 환경 변수가 설정되지 않은 경우 git이 기본적으로 활성화하는 -S 옵션을 비활성화하는 것입니다.

좋은 수정은 다음과 같은 방법으로 git 구성을 변경하는 것입니다.

git config --global core.pager 'less-+ S'

적어도 git 버전 1.7.9.5에서는 git log줄 바꿈을 지원합니다. git 도움말 로그에서 :

 PRETTY FORMATS
   %w([<w>[,<i1>[,<i2>]]]): switch line wrapping

예를 들어 다음은 72 개의 열에서 긴 주제를 래핑합니다.

alias gl='git log --format="%C(yellow)%h %an %ad%C(reset)%n%w(72,1,2)%s"'

(이에 의존하는 대신 커밋 형식 지정 규칙을 따라야한다는 데 동의했습니다. 그러나 이는 모든 사람이 규칙을 알고 존중하는 날이 올 때까지 유용 할 수 있습니다.)


이것은 나를 도왔습니다.

git --no-pager log WhateverBranch | head -n40

일반적으로 브랜치는 크기가 크므로 헤드에 파이핑하고 -n 스위치를 사용하면 가장 최근에 필요한 출력 40 줄 (또는 여러 줄) 만 가져올 수 있으며 줄 바꿈해야합니다 (스크롤 할 필요 없음). 이 방법에는 색상 서식도 없습니다.


As VonC mentioned, you may want to wrap your commit messages to 72 characters and kill many birds with one stone. This git hook auto-wraps your commit messages and works with any editor: https://github.com/surabhigupta/AutoWrapSeventyTwo


Using this format made my life happier:

log --pretty=format:\"%w(80,1,41)%h - %an, %ar : %s\"

Since the fields in the output ahead of the commit message totaled about 39 characters for most of my commits, it makes reading a lot easier.


Personal suggestion is be simple. When you want to see the full lines in the less pager just type -S this will change to folding the lines or back should you wish to view a section that way.


So I was looking for a solution to a similar problem to this, and came across this question. In my case I'm running git show and I have 2 lines where the change is in a single word, towards the end of a very long line. I ended up solving this with a similar approach to how I do with git diff, using the --word-diff-regex option.

git show --color --word-diff-regex="[^[:space:],]+" 55de9c954d5d74a185879d3441a69cc1889c00f1 |more


This is how I solved for wrapping git log messages, for those who are still looking for answers:

git log --pretty=format:"@%H,%cn,%cD,%B" <file name> | tr "\n" " "|tr "@" "\n"

The output of the git log command is piped that finds the newline and replaces with a white space. This is the logic used to join commit messages as a single line.

Here, I am using "@" as a delimiter to differentiate between the commits. You can replace it with whatever special symbol you want. "%H" represents commit hash, "%cn" represents committer name, "%cD" represents commit date, and "%B" raw body message. If you want to know more about pretty=format, please take a look at https://git-scm.com/docs/pretty-formats

Please note that this may not work if you have newline character within git commit message.


SHORT ANSWER:
Type -S then Enter when viewing the git log.

DETAILED ANSWER:
git log outputs using the less text viewer, so simply type -S then Enter to toggle between the two line-wrapping modes of "Chop long lines" and "Fold long lines." The "Fold long lines" option enables word wrap.

Source that helped me learn this: https://superuser.com/a/272826/425838


If nano is your preferred editor, then you can set up git to use nano with automatic wrapping at e.g. 72 characters:

git config --global core.editor "nano -r 72"

For those using SourceTree, there's a setting (Options > General) that will show a column guide in the commit message:

commit guide settings in SourceTree

commit guide example

참고URL : https://stackoverflow.com/questions/2119942/how-to-wrap-git-commit-comments

반응형