2009-06-30 7 views

답변

4

git-mergetool에서 스크립트되었습니다. 나는 이것을 나의 사본의 344 행에서 발견했다.

git mergetool man page에서 언급 한 바와 같이
if test -z "$merge_tool"; then 
    merge_tool=`git config merge.tool` 
    if test -n "$merge_tool" && ! valid_tool "$merge_tool"; then 
     echo >&2 "git config option merge.tool set to unknown tool: $merge_tool" 
     echo >&2 "Resetting to default..." 
     unset merge_tool 
    fi 
fi 

if test -z "$merge_tool" ; then 
    if test -n "$DISPLAY"; then 
     merge_tool_candidates="kdiff3 tkdiff xxdiff meld gvimdiff" 
     if test -n "$GNOME_DESKTOP_SESSION_ID" ; then 
      merge_tool_candidates="meld $merge_tool_candidates" 
     fi 
     if test "$KDE_FULL_SESSION" = "true"; then 
      merge_tool_candidates="kdiff3 $merge_tool_candidates" 
     fi 
    fi 
    if echo "${VISUAL:-$EDITOR}" | grep 'emacs' > /dev/null 2>&1; then 
     merge_tool_candidates="$merge_tool_candidates emerge" 
    fi 
(snip) 
+0

새로운 Git을 다운로드하고 소스를 볼 필요가있다. 내 자식은 컴파일 된 형식으로되어있어서 읽을 수 없습니다. @ 어떻게 Git의 소스 코드를 새로 다운로드하지 않고도 볼 수 있습니까? –

+0

@Masi : git 자체가 컴파일되는 동안 mergetool과 같은 많은 명령이 실제로는 스크립트를 어딘가에 넣을 수 있습니다. 내 시스템에서 이들은 대부분/usr/lib/git-core/ – kwatford

2

,

--tool=<tool> 

으로 지정한 병합 해상도 프로그램입니다.
유효 병합 도구는 kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, tortoisemerge, opendiff 및 araxis입니다.

이제는 그 목록이 어디에서 유래 되었습니까?

<Git>/libexec/git-core/git-mergetool--lib 

git config merge.tool 명령에 따라 선택을 수행하는 스크립트 자식 - mergetool에서 사용 :

사실, 이러한 도구 (및 사용자 지정 옵션) 스크립트에 사용됩니다.

그러나 valid_tool 자식 - mergetool() 함수를 기반으로 '자동 선택'의 비트가 - LIB : mergetool.<aMergeToolName>.cmd을 기반으로

valid_tool() 

그것은 get_merge_tool_cmd 사용은().
해당 설정이 git config 파일 중 하나에 남아 있으면 ... 해당 도구가 선택됩니다.


오른쪽 ... Jakub Narębski 그냥 git-mergetool--lib 스크립트의 오른쪽 부분을 지적 :

적절라는 이름의 기능
get_merge_tool() { 
    # Check if a merge tool has been configured 
    merge_tool=$(get_configured_merge_tool) 
    # Try to guess an appropriate merge tool if no tool has been set. 
    if test -z "$merge_tool"; then 
     merge_tool="$(guess_merge_tool)" || exit 
    fi 
    echo "$merge_tool" 
} 

guess_merge_tool() (당신은 내가 그것을 찾을 수 있어야한다고 생각합니다! ..)는 다른 것들 중에서도 opendiff를 감지 할 수있는 다음과 같습니다 :

# Loop over each candidate and stop when a valid merge tool is found. 
for i in $tools 
do 
    merge_tool_path="$(translate_merge_tool_path "$i")" 
    if type "$merge_tool_path" > /dev/null 2>&1; then 
     echo "$i" 
     return 0 
    fi 
done 
+2

에 저장됩니다. 실제로 'git-mergeool-lib'의 'guess_merge_tool' –