[Linux][bash] git branch를 prompt에 넣기

~/.bashrc 에 다음을 추가.

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
#  PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]$ "

[ASM] IT Block

이게 ARM에만 관련된 것인지는 확실치 않다.

일단 ARM Compiler toolchain Assembler Reference에 IT instruction에 관한 설명(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjabicci.html)이 있다.

IT는 (If-Then) instuction을 말한다. 이름에서 알 수 있듯이, 분류는 Branch and control instruction 이다. IT instruction은 4개의 이어지는 instructions conditional로 구성되는데, 이를 IT block이라고 한다. 이들 condition은 모두 같을 수도, 일부는 다른 것들과 논리적으로 반대일 수도 있다. 이 instruction이 conditional flags를 바꾸지는 않는다.

IT{x{y{z}}} {cond} 로 쓰인다.

x는 그 IT block에서 두번째 instruction을 위한 condition switch, y는 세번째, z는 4번째, cond는 첫번째이다.

IT block의 2번째에서 4번째 instruction은 다음 중 하나일 수 있다:

T: Then. cond condition이 적용된다.

E: Else. cond의 반대 condition이 적용된다.

BKPT instruction을 제외한 IT block 안의 (branches를 포함하는) instrcution들은 {cond} 부분에 condition을 적어야 한다.

assembler가 뒤의 instruction에 적힌 condition에 따라 자동으로 생성해주므로, IT instrcution을 작성할 필요는 없다. IT instruction을 작성한다면, assembler가 그 validity를 체크한다.

ARM code를 assembling할 때 assembler가 같은 체크를 하지만, IT instrcution을 생성하지는 않는다.

CMP, CMN, TST를 제외한 condition code flags에 영향을 주지 않는 16-bit instrcution들은 IT blcok안에서 사용되어도 상관없다.

IT block 안의 BKPT instrcution은 언제나 실행되기 때문에 {cond} 부분 안에 condition은 필요없다. IT bock은 그 다음 instrcution부터 이어진다.

NOTE: AL condition을 사용함으로써 unconditional instruction을 위한 IT block을 사용할 수 있다.

IT block 안에서의 conditional branches는 IT block 밖에 있는 것보다 더 긴 branch range를 갖는다.

IT block 안에 다음 instruction들은 허용되지 않는다

  • IT
  • CBZ, CBNZ
  • TBB, TBH
  • CPS, CPSID, CPSIE
  • SETEND

IT block이 사용될 때 다른 제한은 다음과 같다.

  • PC를 바꾸는 branch나 다른 instrcution은 그 instruction이 그 block의 마지막 instruction일 때만 허용된다.
  • exception handler로부터 되돌아가기 전까지는 IT block 안의 어떤 instruction으로도 branch할 수 없다.
  • IT block 안에서 어떤 assembler directive도 사용할 수 없다.

NOTE: assembler는 IT block 안에서 이들 instruction들이 사용되면 disgnostic message를 출력한다.

[git] 어떤 commit 이 어느 브랜치에 있는지 확인하고 싶을 때

tag로 checkout을 한다던가 하게되면 이게 지금 어느 브랜치에서 나온건지를 알 수 없을 때가 있다. 또는 어느 commit 이 어느 브랜치 상에 있는지를 알고 싶을 때 라던가.. 이럴 때 사용할 수 있는 것이
git-what-branch 스크립트다.

https://github.com/SethRobertson/git-what-branch  

$ git-what-branch –allref <commit sha1 id>