git + LaTeX 워크 플로우 있습니다. Kile에는 통합 된 git 플러그인이

LaTeX에서 매우 긴 문서를 작성하고 있습니다. 나는 업무용 컴퓨터와 랩톱을 가지고 있으며 둘 다 작업합니다. 두 컴퓨터간에 모든 파일을 동기화 된 상태로 유지하고 수정 기록을 유지하고 싶습니다. DVCS로 git을 선택했고 서버에서 저장소를 호스팅하고 있습니다. 또한 Kile + Okular를 사용하여 편집을 수행하고 있습니다. Kile에는 통합 된 git 플러그인이 없습니다. 나는 또한이 텍스트에 대해 다른 사람과 공동 작업하지 않습니다. 어떤 이유로 내 서버에 액세스 할 수없는 경우 다른 개인 저장소를 코다 셋에 배치하는 것에 대해서도 생각하고 있습니다.

이 경우 권장되는 워크 플로 방법은 무엇입니까? 이 작업 계획에 분기를 어떻게 맞출 수 있습니까? 동일한 파일의 두 버전을 비교할 수있는 방법이 있습니까? 숨김을 사용하는 것은 어떻습니까?



답변

LaTeX 워크 플로우 변경 :

git + latex 워크 플로우를 효율적으로 관리하기위한 첫 번째 단계는 LaTeX 습관을 약간 변경하는 것입니다.

  • 우선 각 문장을 별도의 줄에 쓰십시오 . Git은 버전 제어 소스 코드로 작성되었으며, 각 라인은 고유하고 특정 목적을 가지고 있습니다. LaTeX로 문서를 작성할 때 종종 단락의 관점에서 생각하고 자유롭게 흐르는 문서로 작성합니다. 그러나 git에서 단락의 단일 단어에 대한 변경 사항은 전체 단락에 대한 변경 사항으로 기록됩니다.

    한 가지 해결책은 사용하는 것입니다 git diff --color-words( 예를 보여주는 유사한 질문에 대한 답변 참조 ). 그러나 별도의 줄로 나누는 것이 훨씬 더 나은 옵션이라는 점을 강조해야합니다. 병합 충돌을 최소화하는 것으로 나타났습니다.

  • 코드 diff를 살펴 보려면 git의 기본 diff를 사용하십시오. 두 개의 임의 커밋 (버전)의 차이점을 확인하려면 sha각 커밋 의 s를 사용하면됩니다. 자세한 내용 과이 질문설명서 를 참조하십시오

    다른 한편으로, 당신이 당신의 형식화 된 출력 의 차이점을보고 싶다면 , latexdiff이것은 두 가지 라텍스 파일을 가져 와서 pdf로 깔끔한 diffed 출력을 생성하는 훌륭한 유틸리티 (perl로 작성)를 사용하십시오 ( 이미지 소스 ) :

    git-latexdiff를 사용하여 하나의 명령으로 gitlatexdiff( latexpand필요한 경우 플러스) 결합 할 수 있습니다 (예 : 작업 트리git latexdiff HEAD^ 와 마지막 커밋 사이의 차이를 보려는 경우).

  • 라텍스로 긴 문서를 작성하는 경우 다른 챕터를 자신의 파일로 분할 하고 \include{file}명령을 사용하여 기본 파일에서 호출하는 것이 좋습니다 . 이런 방식으로 작업의 현지화 된 부분을 편집하는 것이 더 쉬우 며, 큰 장의 로그에서 파악하지 않고 각 장의 변경 사항을 알기 때문에 버전 관리가 더 쉽습니다. 파일.

git을 효율적으로 사용 :

  • 가지를 사용하십시오! . 내가 줄 수있는 더 좋은 조언은 없을 것입니다. 나는 브랜치가 작품의 “다른 아이디어”나 텍스트의 “다른 아이디어”를 추적하는데 매우 도움이된다는 것을 알게되었다. master분기, 경우 모든 지점의, 상태, 즉 “를 게시 할 준비가”당신이 그것에 당신의 이름을 넣어 의향이 있다고 존재하는 경우, 그것은 마스터 지점해야 가장 전류, 작품의 주요 신체해야합니다.

    당신이 대학원생이라면 지점도 매우 도움이됩니다. 모든 대학원생이 증명 하듯이, 고문은 많은 수정을해야하는데, 대부분 귀하가 동의하지 않습니다. 그러나 나중에 토론 후에 되돌려 놓더라도 당분간 변경해야 할 수도 있습니다 . 따라서 이러한 경우 새 브랜치 advisor를 만들고 자신의 개발 브랜치를 유지하면서 원하는대로 변경할 수 있습니다 . 그런 다음 두 가지와 체리 선택을 병합하여 필요한 것을 선택할 수 있습니다.

  • 또한 각 섹션을 다른 브랜치로 나누고 현재 브랜치에 해당하는 섹션에만 집중하는 것이 좋습니다. 새로운 커밋을 만들 때 브랜치를 생성하거나 초기 커밋을 할 때 더미 섹션을 만듭니다 (실제로 선택). 지점에 없을 때 다른 섹션 (예 : 3)을 편집해야한다는 충동에 저항하십시오. 편집 해야하는 경우이 것을 커밋 한 다음 분기하기 전에 다른 것을 체크 아웃하십시오. 섹션의 히스토리를 자체 분기에 유지하고 (섹션에서) 일부 섹션의 나이를 한눈에 알 수 있기 때문에 이것이 매우 유용합니다. 어쩌면 당신은 섹션 5에 섹션 5를 조정 해야하는 자료를 추가했을 것입니다 … 물론, 이것들은 모든 경우에주의 깊게 읽는 동안 관찰 될 것이지만, 이것을 한눈에 보는 것이 도움이 될 수 있습니다. 내가 변속 기어

    다음은 내 지점의 예이며 최근 논문에서 병합합니다 (OS X에서는 SourceTree를 사용하고 Linux에서는 명령 줄에서 git을 사용합니다). 당신은 아마 내가 세계에서 가장 빈번한 커미터가 아니거나 항상 유용한 의견을 남기지 않는다는 것을 알 것입니다. 그러나 이것이 좋은 습관을 따르지 않는 이유는 아닙니다. 주요 테이크 아웃 메시지는 지점에서 일하는 것이 도움이된다는 것입니다. 내 생각, 아이디어 및 개발은 비선형으로 진행되지만 지점을 통해 추적하고 추적하면 만족할 때 병합 할 수 있습니다 (나중에 삭제 된 다른 지점도있었습니다). 커밋에 의미가있는 경우 커밋에 “태그”를 붙일 수도 있습니다 (예 : 저널에 초기 제출, 수정 된 제출 등). 여기에 “버전 1″이라는 태그가 붙어 있습니다. 현재 버전은 초안입니다. 나무는 일주일을 나타냅니다

  • 또 다른 유용한 작업은 문서 전체를 변경 (예 : 모든 곳 으로 변경) \alpha하여 \beta커밋하는 것입니다. 그렇게하면 다른 것과 함께 롤백하지 않고도 변경 사항을 되돌릴 수 있습니다 (git를 사용 하여이 작업을 수행 할 수있는 방법이 있지만 피할 수 있다면 어떨까요?). 프리앰블에 추가 할 때도 마찬가지입니다.

  • 원격 저장소를 사용하고 정기적으로 변경 사항을 업스트림으로 푸시하십시오. github 및 bitbucket과 같은 무료 서비스 제공 업체 (후자는 무료 계정으로 개인 저장소를 만들 수 있음)를 사용하여 git / mercurial로 작업하는 경우 이들을 사용하지 않을 이유가 없습니다. 최소한 라텍스 파일과 다른 컴퓨터에서 남은 곳에서 계속 편집 할 수있는 서비스에 대한 보조 백업 (기본 백업이 있기를 바랍니다)으로 고려하십시오.


답변

비슷한 워크 플로도 있습니다. 한 번에 하나의 지점을 작업하고 있지만 각기 다른 작업 상태에 대해 별도의 지점을 갖는 것이 유리합니다. 예를 들어, 좋은 초안을 고문에게 보내는 것을 상상해보십시오. 그럼, 당신은 미친 아이디어를 얻을! 일부 핵심 개념을 변경하고 일부 주요 섹션 등을 다시 작업하려고합니다. 따라서 분기하고 작업을 시작합니다. 마스터 브랜치는 항상 “릴리스 가능”상태에 있습니다 (또는 그 시점과 거의 비슷합니다). 따라서 다른 지점이 미쳤고 급격한 변화가 있지만 다른 게시자가 자신이 가지고있는 것을 보거나 회의에 제출하는 학생 인 경우 마스터 지점은 항상 릴리스 가능하고 갈 준비가되었습니다 (또는 조언자). 박사 조언자가 아침에 먼저 초안을보고 싶다면

마스터 브랜치가 작업의 “릴리스 가능”상태를 가지고 있다고 가정하겠습니다. 이제는 동일한 내용에 대해 서로 다른 형식 요구 사항이있는 여러 동료 검토 저널에 제출하려고하며 독자 등을 위해 논문을 편집하는 방법에 대한 여러 가지 작은 비판이 나올 것으로 기대합니다. 각 저널에 대한 브랜치를 쉽게 작성하고, 저널 특정 변경 사항을 작성하고, 제출하고, 피드백을받을 때 각 개별 브랜치에서 변경 사항을 작성할 수 있습니다.

또한 Dropbox와 git을 사용하여 위에서 설명한 시스템을 만들었습니다. 보관 용 폴더에 베어 본 리포지토리를 만들 수 있습니다. 그런 다음 두 컴퓨터 중 하나에서 보관함에 푸시 / 풀을하여 모든 끝에서 최신 상태를 유지할 수 있습니다. 사람들이 보관 용 저장소에 동시에 푸시하려고하면 손상 될 수 있으므로이 시스템은 일반적으로 공동 작업자 수가 적은 경우에만 작동합니다.

기술적으로 하나의 저장소를 dropbox 폴더 안에 유지하고 거기에서 모든 작업을 수행 할 수 있습니다. 그러나 사람들이 dropbox에 지속적으로 변경되는 파일 (gits internal files)을 동기화하는 데 문제가 있다고 언급 했으므로 이것을 권장하지 않습니다.


답변

나는 이것을 bash 함수로 구현하려고 시도했지만 ~/.bashrc항상 사용할 수 있도록 포함시켰다 .

function git-latexdiff {
    if [[ $# != 2 ]];
    then
        printf "\tusage: git-latexdiff <file> <back-revision>  \n";
    elif [[ $2 -lt 0 ]];
    then
        printf "\t<Back-revision> must be positive\n";
    else
        dire=$(dirname $PWD/$1);
        based=$(git rev-parse --show-toplevel);
        git show HEAD~$2:$(echo $dire| sed 's!'$(echo $based)'/!!')/$1 > $1_diff.tmp;
        latexdiff $1 $1_diff.tmp > $1_diff.tex;
        pdflatex $1_diff.tex;
        okular $1_diff.pdf;
        rm $1_diff*;
    fi;
}

이 기능은 latexdiff설치 해야 하며 경로에 있어야합니다. 그것을 찾을하는 것도 중요 pdflatex하고 okular.

첫 번째는 LaTeX를 처리하는 데 선호되는 방법이므로이를 처리 할 수 latex있습니다. 두 번째는 내 PDF 리더 evince입니다. 그놈이나 다른 솔루션 에서 사용하고 싶을 것 입니다.

이것은 하나의 문서를 염두에두고 만든 빠른 버전이며, git을 사용하면 다중 파일 LaTeX 문서를 추적하는 데 많은 시간과 노력을 잃게됩니다. git 이이 작업을 수행하도록 할 수도 있지만 원하는 경우 계속 사용할 수도 있습니다\include


답변

또 다른 옵션은 과학 논문에 일종의 Github 인 Authorea 를 사용 하는 것입니다. Authorea의 모든 기사는 Git 저장소입니다. 그리고 작성하는 LaTeX는 HTML5 (컴파일 할 때 PDF)로 렌더링됩니다.


답변

Windows 에 있거나 설치가없고 간단한 스크립트 인 경우 버전 diff 에 이것을 사용하십시오 bat. windows10, miktex2.9에서 완벽하게 작동합니다.

https://github.com/redreamality/git-latexdiff