組織には、組織以外のユーザーとのコラボレーションなど、「逆絡み」操作がありますか?


10

自分のノート/テスト/コードを組織で記述してorg-bable-tangleから、ソースファイルの生成に使用したいと思います。ただし、これらのファイルはすべてバージョン管理の対象であり、組織環境外から変更される可能性があります。

いくつかのsrcブロックを用意して、それぞれがバージョン管理にコミットするさまざまなファイルに束ねられるようにしたいと思います。しかし、同時に、バージョン管理から変更をプルした後、これらの各ファイルを「もつれ」て組織ファイルに戻すことができます。

これを行う簡単な方法はありますか?私は今遊んで検討していますinsert-file-contents


あなたが何を求めているのか、少し例を挙げていただけますか?1つ以上のorgファイルにコードブロックがあり、これらのブロックのもつれから生成されたファイルを、orgファイルの変更により元のブロックに分解したいようです。
デビッドD.

基本的に、ワークフローは次のようになります。(1)組織で読み書き可能なコードを記述します。(2)そのコードを1つまたは複数のファイルに絡ませる。(3)これらのファイルをgit commitします。(4)昼食をとる(5)gitが同僚の変更をプルする。(6)これらの変更を「逆絡み」にして、私の組織ファイルのコードブロックに戻します。(7)goto(1)。
RJTK 2018年

回答:


6

はい、そうorg-babel-detangleです。

org-babel-detangleは、インタラクティブにコンパイルされたLisp関数です ob-tangle.el

(org-babel-detangle &optional SOURCE-CODE-FILE)

ソースファイルの変更を元のOrgファイルに反映します。これには、元のコードブロックを見つけることができるリンクコメントがコードブロックに絡まっていることが必要です。

それを機能させるには、commentsヘッダー引数をに設定する必要があります。linkたとえば、

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello'
#+end_src

次にM-x org-babel-tangle、コードブロックをエクスポートするために使用して、という名前の新しいファイルhello.rbが作成されます。次のような同様の内容が含まれているはずです

~ $ cat hello.rb
# [[file:~/foo.org][No heading:1]]
puts 'hello'
# No heading:1 ends here
~ $

最後に、hello.rbEmacs で開いてに変更hellohello world、のバッファーで実行M-x org-babel-detanglehello.rbます。組織ファイルが更新されます

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello world'
#+end_src

このorg-babel-detangle関数の使用方法について、より正確に(または例を挙げて)ください。hello.rbに絡み、コードを軽く変更した後、RubyコードでM x org-babel-detangleを使用しようとしましたが、「org-babel-detangle:Wrong type argument:stringp、nil」というエラーが発生しました。
Lgen

@Lgen回答を更新しました。また、org-babel-detangleのドキュメント文字列を読んで、目的と使用法を理解することを忘れないでください。
xuchunyang 2018年

この説明をありがとう。私は、ソースコードをemacs内で編集してリバースタングルを可能にする必要があるという想定を理解していませんでした(別のテキストエディターを使用してソースコードを変更していました)。現在、期待どおりに動作しています。
Lgen

これは優れた機能ですが、私が期待していたものとはかなり異なります。#[[...]]コメントは、自分以外には何の意味もないので、実際にはコミットできません。リンクコメントを必要とせずにソースブロックに注釈を付けてファイル全体からもつれを取り除くことは可能ですか?本質的にはinsert-file-contents
RJTK 2018年

2

org-tanglesyncもあり、同期の方法がより簡単です。org-babel-detangle

基本的に、ブロックが外部ファイルに絡まっている場合、そのブロックが編集されるたびに外部ファイルもチェックされ、差分が検出された場合、ユーザーは外部の変更を拒否するか、組織のsrcブロックにプルするように求められます。

これには、バッファ内のすべてのもつれたブロックを自動的に処理する機能もあります。お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.