¿La organización tiene alguna operación de "enredo inverso", por ejemplo, para colaborar con usuarios que no pertenecen a la organización?

10

Me gustaría escribir mis propias notas / pruebas / código en org y luego usarlas org-bable-tanglepara producir archivos fuente. Sin embargo, todos estos archivos están sujetos al control de versiones y, por lo tanto, están sujetos a cambios desde fuera de mi entorno de organización.

Me gustaría poder tener una serie de srcbloques y luego enredarme en un montón de archivos diferentes, cada uno de los cuales se comprometería con el control de versiones. Pero al mismo tiempo, ser capaz de "desenredar" cada uno de estos archivos de nuevo en mi archivo de organización después de extraer cualquier cambio del control de versiones.

¿Hay alguna forma directa de hacer esto? Ahora estoy considerando jugar coninsert-file-contents

RJTK
fuente
¿Podría dar un pequeño ejemplo de lo que está pidiendo hacer? Parece que tiene bloques de código en uno o más archivos organizativos y desea que el archivo o los archivos generados a partir de la maraña de estos bloques se desarmen en los bloques originales con cambios en los archivos organizativos.
David D.
Esencialmente, el flujo de trabajo sería así: (1) escribir algún código alfabetizado en la organización. (2) enrede ese código en uno o más archivos. (3) git confirma esos archivos. (4) almorzar (5) git tire los cambios de mi colega. (6) "enredado inverso" esos cambios de nuevo en bloques de código en mi archivo de organización. (7) ir a (1).
RJTK

Respuestas:

6

Si lo es org-babel-detangle.

org-babel-detangle es una función Lisp compilada interactiva en ob-tangle.el.

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

Propague los cambios en el archivo fuente de nuevo original al archivo Org. Esto requiere que los bloques de código se enreden con comentarios de enlaces que permiten encontrar los bloques de código originales.

Debe configurar el commentsargumento de encabezado linkpara que funcione, por ejemplo,

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

luego use M-x org-babel-tanglepara exportar el bloque de código, hello.rbse creará un nuevo archivo llamado , debe tener contenidos similares como los siguientes

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

Por último, abierta hello.rben Emacs, el cambio helloa hello world, y correr M-x org-babel-detangleen hello.rbbuffer 's. El archivo de la organización se actualizará.

#+begin_src ruby :tangle hello.rb :comments link
  puts 'hello world'
#+end_src
xuchunyang
fuente
¿Podría ser más preciso (o dar un ejemplo) sobre cómo usar esta función org-babel-detangle. Intenté con su código ruby ​​usar M x org-babel-detangle después de enredar a hello.rb y modificar ligeramente el código, pero tengo un error "org-babel-detangle: argumento de tipo incorrecto: stringp, nil".
Lgen
@Lgen He actualizado mi respuesta. Y no olvide leer org-babel-detanglela cadena de documentación para comprender el propósito y el uso.
xuchunyang
Gracias por esta aclaración. No había entendido la suposición de que el código fuente tenía que editarse dentro de emacs para permitir el enredo inverso (estaba usando otro editor de texto para modificar el código fuente). Funciona como se esperaba ahora.
Lgen
Esta es una buena característica, pero no es exactamente lo que esperaba encontrar. Realmente no puedo cometer los # [...] comentarios ya que no significan nada excepto para mí. ¿Es posible anotar un bloque de origen para desenredar de un archivo completo sin requerir el comentario del enlace? ¿Esencialmente justo insert-file-contents?
RJTK
2

También hay org-tanglesync , que tiene un método de sincronización mucho más simple queorg-babel-detangle

Esencialmente, si un bloque está enredado en un archivo externo, entonces cada vez que se edita ese bloque, también se verifica el archivo externo, y si se detecta un diferencial, se le solicita al usuario que rechace o extraiga los cambios externos en el bloque org src.

Esto también tiene funciones para procesar automáticamente todos los bloques enredados en un búfer. Espero que ayude.

Mehmet Tekman
fuente