programing

Mathematica 노트북의 버전 관리

nasanasas 2020. 11. 12. 08:19
반응형

Mathematica 노트북의 버전 관리


물론 Mathematica 노트북은 일반 텍스트 파일입니다. 버전 제어 시스템 (특정 시스템이 중요하다고 생각하지 않지만 제 경우에는 git)과 잘 작동 할 것으로 기대하는 것이 합리적입니다. 그러나 사실은 모든 .nb 파일이 캐시 정보, 타임 스탬프 및 기타 분류 된 메타 데이터로 가득 차 있다는 것입니다. 그것의 흠집.

즉, 제한된 버전 제어가 가능합니다. 커밋 및 롤백이 잘 작동합니다. 하지만 병합은 재앙 입니다. Mathematica는 병합 마커가있는 파일을 열지 않으며 텍스트 편집기는 .nb 파일을 통해 이동할 수 없습니다.

노트북을 버전 관리하에 둔 사람이 있습니까? 어떻게?


텍스트 편집기로 노트북을 볼 때 참조하는 메타 데이터 인 파일 개요 캐시를 비활성화하는 것이 좋습니다. 아시다시피 여러 당사자가 동일한 노트북을 편집하는 경우 병합 충돌이 발생할 수 있습니다.

이것은 Option Inspector로 쉽게 비활성화됩니다. 매스 매 티카 메뉴에서 이동 형식... 옵션 경위 왼쪽 상단 세트에서 범위 에 드롭 다운을 선정 노트북 및 검색 FileOutlineCache검색 필드에 입력하십시오. 옵션을 False로 설정하고 노트북을 저장하면 모든 설정이 완료됩니다.

이렇게하면 노트북을 여는 속도가 약간 느려질 수 있지만 노트북이 다소 크지 않으면 차이를 느끼지 못할 것입니다.


Mathematica Stack Exchange 에는 Git을 사용하여 Mathematica로 버전 관리를 수행하는 방법에 대한 좋은 권장 사항이 있습니다 . 요컨대, 철학은 .nb 노트북의 사용을 최소화하고 .m 패키지로 대부분의 버전 관리를 시도하는 것입니다 (위의 xuhdev 및 MMA 사용자가 말한 것과 유사 함). 이것은 노트북이 관리되는 방식을 고려할 때 상당히 합리적으로 보입니다.


병합 문제에 대한 정확한 해결책은 아니지만 이것이 우리 팀에서 노트북과 소스 제어를 처리하는 방법입니다. 기본적으로 Mathematica 노트북은 바이너리 파일을 처리하는 방식으로 처리합니다. 체크인되었지만 :

  • 우리는 항상 .nb와 함께 pdf 사본을 보관합니다 (어떤 이유로 .nb 파일을 읽을 수있는 기능을 잃을 경우 정보를 복원하기위한 백업. 여전히 독점 형식이지만 조금 더 널리 퍼져 있으며 가능성은 Adobe와 Wolfram입니다. 동시에 사라지지 않을 것입니다)
  • 우리는 병합을 허용하지 않습니다
  • .nb 파일 대신 최종 제품 (렌더링 된 노트북) 만 코드 검토합니다.

우리는 주로 Mathematica를 작은 증명, 탐색 및 사이드 트랙에 사용하므로 위의 절차는 우리에게 잘 작동합니다 (우리의 주요 문서는 LaTeX에 있으며, 이는 비 수학자 / 비 프로그래머에게 더 친숙한 문서를 생성합니다).


Simon과 Kena가 말한 내용에 따라 Mathematica .nb가 버전 제어를 받았을 때 종종 입력 코드 만 일반 텍스트 버전으로 만들고 동일한 이름이지만 .txt 확장자로 저장합니다. 이것이 병합 문제를 직접 해결하지는 않지만 합리적인 방식으로 비교 작업을 수행하고 나중에 .nb를 편집하기 위해 돌아갈 때 수동 병합을 더 분명하게 만듭니다. 이 형식에는 여전히 몇 가지 특이한 점이 있지만 원시 .nb 형식보다 읽기가 훨씬 쉽습니다.

텍스트 파일을 생성하려면 노트북을 새로운 빈 노트북 (단축키 Ctrl-A, C, N, V ​​사용)에 복사하고 메뉴 셀-> 모든 출력 삭제를 선택한 다음 결과를 복사합니다 (Ctrl-A, C ), 결과를 일반 텍스트 편집기에 붙여 넣어 저장합니다. 일단 익숙해지면 놀랍게도 시간이 거의 걸리지 않습니다.


새로운 가능성은 mathematica-notebook-filterMathematica 노트북을 구문 분석하고 모든 출력 셀과 메타 데이터를 제거하여 버전 제어 시스템에 커밋되지 않도록하는 것입니다.

git의 특정 경우에는 통합이 매우 쉽기 mathematica-notebook-filter때문에 git은 gitattribute 필터를 사용하여 diff를 계산할 때 출력과 메타 데이터를 자동으로 정리합니다 . 당신은 있어야합니다 mathematica-notebook-filter필터를 설치하고 경로 변수에 추가 (또는 바이너리를 차례로 아래의 구성을 적용)하고 다음 행을 추가 ~/.gitattributes파일 :

*.nb    filter=dropoutput_nb

이것은 git 에 다음 과 같이 정의 된 필터 *.nb일치하는 모든 파일을 구문 분석하도록 지시 dropoutput_nb합니다 ~/.gitconfig.

[filter "dropoutput_nb"]
    clean = mathematica-notebook-filter
    smudge = cat

어떤 이유로 든 특정 Mathematica 노트북을 모든 출력 및 메타 데이터로 커밋하려면 다음 .gitattributes을 추가 하여 프로젝트 파일 에서 필터를 비활성화 할 수 있습니다 .

notebook_file.nb    !filter

면책 조항 : 저는이 도구의 작성자입니다. 그것은 오픈 소스이며 피드백 (좋은 것과 나쁜 것 모두)을 높이 평가합니다. Github 에서 기고를 환영합니다 .


음, 내 솔루션은 노트북을 추적에 사용하는 것이 아니라 일반 텍스트 파일 ( "노트북"일반 텍스트가 아님)을 사용하는 것입니다.

노트북이있을 때마다 "다른 이름으로 저장 ..."메뉴를 사용하여 현재 파일을 일반 텍스트 파일로 저장할 수 있습니다. 로드해야 할 때 Mahthematica로 열기 만하면됩니다. 이 파일을 추적하는 것은 노트북 파일을 추적하는 것보다 훨씬 좋습니다. Mathematica Notebook이 아닌 일반 텍스트 형식을 사용하면 어떤 기능을 잃을 수 있는지 잘 모르겠지만 지금까지 결함을 발견하지 못했습니다.

참조 : http://www.topbug.net/blog/2013/05/02/track-mathematica-source-files-with-version-control-systems/


소스 제어 시스템이 여러 사용자가 한 줄에 변경 사항을 감지 한 경우에만 병합 마커를 가져와야합니다.

소스 제어 시스템은 마커를 추가하여 충돌이있는 위치를 명확하게하고 각 충돌을 해결하면서 수동으로 제거하도록합니다. 소스 제어 시스템이 자동으로 수행하는 방법을 알 수있는 방법은 없습니다.

파일이 텍스트이지만 프로그램에서만 읽을 수 있도록 설계된 경우 줄 끝 문자가 전혀 없을 수 있습니다 (또는 매우 긴 줄). 따라서 여러 사람이 이러한 파일에 대해 작업하는 경우 병합 충돌이 많이 발생합니다.

나는 nb 파일 형식에 익숙하지 않지만 일반적으로이 문제에 대한 해결책은 한 번에 한 사람 만 파일에 대해 작업하도록하는 것입니다 (즉, nb 파일에 대해 단독 체크 아웃 모드를 사용).

참고 URL : https://stackoverflow.com/questions/2816628/version-control-of-mathematica-notebooks

반응형