Controle de versão para colaboração (com diferenças no nível da palavra)?

20

Agora, a maioria dos trabalhos é escrita de forma colaborativa, e os colaboradores geralmente estão localizados em lugares diferentes. Eu sempre usei sistemas de controle de versão para meus documentos e código, e também achei o controle de versão crítico para projetos de software colaborativo, mas parece que muitos pesquisadores teoricamente evitam seu uso para escrever trabalhos conjuntos. Para convencer meus colaboradores de que o controle de versão (controle de revisão) é uma boa idéia para trabalhar juntos, parece haver alguns pré-requisitos. Não é possível forçar todos a se preocupar com um conjunto específico de convenções para quebras de linha e parágrafos, ou evitar conversões de tabulação / espaço.

Alguém oferece hospedagem gratuita de pequenos repositórios de documentos compartilhados, com controle de versão compatível com documentos de texto que pode lidar com diferenças de nível de palavras ( não baseadas em linhas)?

Caso contrário, gostaria de receber outras sugestões baseadas na experiência (vamos evitar especulações, por favor).

Eu estava pensando em Git, Subversion, Mercurial, darcs ou Bazaar, configurado para lidar com diferenças no nível de palavras com o wdiff, junto com uma maneira simples de configurar o acesso protegido por chaves públicas (por exemplo, via ssh). No entanto, nenhum dos provedores de controle de versão que eu analisei parece oferecer algo assim. Para a colaboração científica, os recursos "empresariais" enfatizados por muitas dessas empresas não são muito importantes (muitos ramos, integração com o trac, auditoria de terceiros, equipes hierárquicas de projetos). Mas as diferenças no nível das palavras parecem críticas, mas não suportadas. Na minha experiência, com diferenças de nível de linha para arquivos de texto, todos precisam evitar a reformatação de parágrafos e editores que alteram as guias para espaços ou vice-versa causam problemas; também parece haver muitos conflitos de edição espúrios.

Consulte a pergunta relacionada no MO sobre ferramentas para colaboração e questões relacionadas no TeX.SE, sobre controle de versão para documentos LaTeX e pacotes LaTeX para controle de versão . Consulte também o Gráfico de Revisão de Comparação de Hospedagem SVN para obter uma grande lista de provedores de hospedagem, para apenas um dos principais sistemas de controle de versão.


Edit: A resposta de Jukka Suomela à pergunta do TeX.SE "As melhores ferramentas de comparação e mesclagem compatíveis com o LaTeX para subversão " parece ser a melhor sugestão até agora, abordando como interpretar os deltas no nível de uma palavra. Além disso, Jukka explicou como as diferenças entre versões sucessivas no final do repositório são separadas das diferenças no nível do usuário usadas para detecção de conflitos e mesclagem de mudanças. A resposta de Jukka no TeX.SE exclui explicitamente edições e mesclagens simultâneas, baseando-se no token de edição atômica tradicional para evitar conflitos de edição. Esclarecendo (e modificando) minha pergunta original, existe uma maneira de garantir que os conflitos de edição possam ser resolvidos com base na diferença de palavras, e não na diferença de linha? Em outras palavras, podewdiffou ferramentas semelhantes sejam integradas à parte de detecção de conflitos das ferramentas de controle de versão, semelhante à maneira como as diferenças de fim de linha e as diferenças de espaço em branco podem ser ignoradas?

András Salamon
fonte
3
Não entendo bem a pergunta. Por exemplo, no SVN, as diferenças exibidas para um usuário são geradas pelo cliente, e isso depende do seu cliente SVN (e de sua configuração) se você obtém diferenças baseadas em palavras ou diferenças baseadas em linhas. A empresa que hospeda seu repositório SVN não afeta isso.
Jukka Suomela #: 121110
2
@suresh Se você estiver editando documentos de texto (escritos), muitas vezes é difícil ter que escanear uma linha inteira em um diff para ver que alguém mudou uma vírgula. O comportamento correto geralmente é mostrar a unidade mínima de mudança. Ou considere o comportamento se alguém não usar quebras de linha. A alteração de uma única palavra fará com que o parágrafo inteiro apareça no diff para que você encontre a pequena alteração.
Re: # Reitblatt # 03:
2
Não uso quebras de linha rígida para quebrar linhas. No meu código-fonte Latex, uma linha física de texto geralmente é um parágrafo completo. O editor pode quebrá-lo para exibição, dependendo da largura da janela atual. Simplifica muito as coisas; nunca é necessário se preocupar com coisas como devo reorganizar um parágrafo ou concordar com a largura "certa" da linha com seus co-autores. No entanto, você precisará de uma ferramenta de diferenciação no nível da palavra para ver as alterações rapidamente.
Jukka Suomela
2
@Andras Meu argumento é que o sistema VC só precisa reconstruir as duas revisões no lado do cliente, e não é de surpreender que todos os sistemas VC possam fazer isso. O que você precisa é de um utilitário de mesclagem tripla no nível da palavra, mas eu não conheço nenhum. (Por exemplo, TortoiseMerge e kdiff3 são baseados em linhas.) Depois de ter esse utilitário, qualquer sistema de VC que permita especificar um utilitário de mesclagem externo será suficiente. (Isso inclui svn, bzr, git, hg ...)
Maverick Woo
3
Uma fonte de confusão aqui é que existe um algoritmo diff binário interno (que opera no nível de bytes individuais) usado pelo SVN na comunicação entre o servidor e o cliente e também internamente pelo servidor para manter o repositório compactar. Isso é apenas uma otimização; não é visível para o usuário e o mesmo algoritmo diff binário pode ser aplicado a qualquer tipo de arquivo. Todas as coisas visíveis ao usuário (diferenças legíveis por humanos, mesclagem, resolução de conflitos ...) acontecem no lado do cliente.
Jukka Suomela

Respostas:

11

Eu usei o git para colaborar em alguns documentos escritos em látex. Você terá que seguir algumas regras:

  • Inicie cada frase em uma nova linha, o látex ignora essas novas linhas, desde que não haja linha em branco
  • Use a mesma configuração para formatação (tab / spaces / max width do texto)
  • Para obter melhores resultados, crie um arquivo .gitattributes em seu repositório e adicione a linha *.tex diff=tex. Isso diferencia a sintaxe tex e gera resultados mais significativos.

Você pode usar git diff --color-wordse gitk --color-wordsver diferenças de palavras (consulte também este artigo Diferenças de palavras por palavra no Git sobre como configurar o git para sempre usar o algoritmo de diferenciação de palavras para exibir o log do git diff / git).

Para reduzir as mesclagens manuais, posso recomendar o uso de arquivos separados para seções e subseções (dependendo do tamanho do seu documento).

Davy Landman
fonte
Vou considerar fazer isso para meus próprios documentos, parece ser uma maneira fácil de alcançar a maioria dos meus objetivos. Mas nem todo mundo está interessado em trabalhar dessa maneira ...
András Salamon
2
Para pessoas hesitantes em trabalhar dessa maneira, você pode usar o TortoiseGit se elas não gostarem da linha de comando git. Se for sobre cada sentença em uma nova parte da linha, contanto que não exista uma largura máxima de texto forçada, isso não é tão importante. (Eu tenho trabalhado em alguns projetos sem essa regra)
Davy Landman
No geral, eu concordo que o git é uma boa escolha. Mas por que os arquivos separados para (sub) seções reduzem o número de mesclagens manuais? Também me pergunto como iniciar cada frase em uma nova linha ajuda (às vezes as frases se misturam no processo de edição).
dd1 19/02
com relação aos arquivos de separação: naquela época, eu não entendia os detalhes exatos da fusão do git, de modo que isso é realmente desnecessário, mas ainda aconselhável por outros motivos. A frase em uma nova linha é muito importante, pois a maioria das ferramentas do git sempre mostra alterações de linha; se você usar outra estratégia, diga ao editor para fazer quebras de linha, toda vez que alguém alterar uma palavra em um parágrafo, você terá que caçar. aconteceu, e no caso de mesclagem automática: de jeito nenhum.
Davy Landman
4

Eu realmente quero ecoar os outros e sugerir que você se sente e elabore uma boa estratégia SVN. Eu uso o SVN para hospedar toda a minha estrutura de "pesquisa":

  • Gerenciamento de referência JabRef
  • PDFs baixados
  • Artigos

É ótimo porque contém tudo e, é claro, fornece uma história. A ressalva é que você precisa de seu próprio servidor. Porém, se você possui alguma máquina Windows existente (ou qualquer outra com que se sinta confortável), é possível instalá-la simplesmente através do VisualSVN Server . Você cria contas apropriadas para os colaboradores e dá a eles acesso a uma área apropriada (por exemplo, talvez o acesso de leitura ao seu arquivo bibtex JabRef e a leitura / gravação em uma área de artigo 'em andamento' compartilhada).

O TortiseSVN pode ser usado como o cliente Windows para interagir com o SVN. Você precisa ter cuidado ao mover / excluir arquivos e copiar pastas (o SVN armazenará metadados dentro de pastas ocultas em cada uma das suas pastas; portanto, você deve executar o comando delete no SVN para se livrar dele, é preciso um pouco de tempo para se acostumar. mas vale o investimento).

Então, ao trabalhar com um colaborador, eles claramente também devem usar o SVN. Mas, novamente, o investimento em aprendizado não é inútil. E, pensando bem, você também pode obtê-lo para ter acesso somente leitura ao arquivo jabref (talvez através do recurso 'externo' no svn).

Dessa forma, com um pouco de reflexão e um pouco de esforço, você pode estar em uma situação em que está editando documentos normalmente, realizando alterações noturnas, atualizando pela manhã e resolvendo todos os conflitos facilmente.

Eu realmente recomendo. Quanto mais pessoas configurarem seus próprios SVNs, melhor, pois isso só melhorará as opções de colaboração no futuro (embora, é claro, seria benéfico se talvez houvesse uma maneira 'padrão' de configurar um repositório científico).

- Edit: De fato, escrevi uma proposta aqui: Estratégia de colaboração científica com LaTeX e SVN . Ele propõe usar o recurso svn externals para permitir uma colaboração fácil entre pessoas com uma configuração semelhante. Deixe-me saber se precisa mudar ou simplesmente não é apropriado.

Seda do meio-dia
fonte
4

Ao ler seu ótimo post e procurar uma solução, eu me deparei com a opção de colorir as alterações no nível das palavras no gitk . O parâmetro gitk parece ser um recurso novo e / ou não documentado, pois o preenchimento automático não o oferece e a página do manual gitk não o lista.
Aqui estão as opções que eu encontrei:

gitk --word-diff=plain
gitk --word-diff=porcelain
gitk --word-diff=color

Você pode encontrar várias discussões sobre esse tópico procurando por "diff --color-words" gitk .

Edit:
Isto é o que parece ...

Diferenças coloridas no nível da palavra usando o gitk

JJD
fonte
1

Eu entendo o problema muito bem. Comecei a usar o Kaleidoscope para diffs com o git. É apenas para Mac, mas suas comparações funcionam melhor que o wdiff, e também possui uma interface e atualizações ao vivo.


fonte
2
Para mim, parece que o Caleidoscópio é apenas uma ferramenta de diferenças baseada em linhas que, além disso, destacam as mudanças dentro de cada linha. Não é um substituto para wdiff e amigos. O caleidoscópio produz diferenças ilegíveis se você, por exemplo, apenas toma um parágrafo de texto e altera algumas quebras de linha. As ferramentas baseadas no Wdiff simplesmente ignoram as alterações nas quebras de linha.
Jukka Suomela