Pergunta

Então você sabe que muitos aplicativos Mac usam "pacotes":Parece um único arquivo para o seu aplicativo, mas na verdade é uma pasta com muitos arquivos dentro.

Para que um sistema de controle de versão lide com isso, ele precisa:

  • verifique todos os arquivos em um diretório, para que o aplicativo possa modificá-los conforme necessário
  • no check-in,
    • submeter arquivos que foram modificados
    • adicione novos arquivos que o aplicativo criou
    • marcar como excluídos arquivos que não estão mais lá (já que o aplicativo os excluiu)
    • gerencie isso como uma mudança atômica

Alguma idéia sobre a melhor maneira de lidar com isso com os sistemas de controle de versão existentes?Algum dos sistemas de versionamento é mais adequado nesta área?

Foi útil?

Solução

Para sistemas SCM distribuídos como git e mercurial não devem ser um problema, como Matthew mencionou.

Se você precisar usar um SCM centralizado como Subversion ou CVS, poderá compactar (arquivar) seus pacotes antes de verificá-los no controle de origem.Isso pode ser doloroso e exige um passo a mais.Há uma boa postagem no blog sobre isso no Tapestry Central:

Pacotes do Mac OS X vs.Subversão

Este artigo demonstra um script Ruby que gerencia o arquivamento para você.

Outras dicas

Mercurial em versões específicas baseadas em arquivos, não em estrutura de diretórios.Portanto, sua árvore de trabalho, que é um repositório completo, não exibe pastas .svn em cada nível.

Isso também significa que um diretório substituído, como um Aplicativo ou outro Pacote, ainda encontrará seu conteúdo com nomes de arquivos específicos sob controle de revisão.Os nomes dos arquivos são monitorados, não inodes ou algo sofisticado assim!

Obviamente, se um novo arquivo for adicionado ao Bundle, você precisará adicioná-lo explicitamente ao seu repositório.Da mesma forma, a remoção de um arquivo de um Bundle deve ser feita com um 'hg rm'.

Ainda não existem GUIs Mercurial decentes para OS X, mas se tudo o que você faz é adicionar/confirmar/mesclar, não é tão difícil usar uma linha de comando.

Uma atualização do futuro:

Se bem me lembro, o problema com o gerenciamento de pacotes no SVN era que todas as pastas .svn eram limpas cada vez que você criava um pacote.Isso não deve mais ser um problema, agora que o SVN armazena tudo em uma única pasta .svn na raiz.

Trazendo esse tópico de volta à luz do dia, desde o iWork de outubro de 2013 (Páginas 5.0 etc.) não permite mais o armazenamento em 'arquivo simples' (zipado), mas apenas como pacotes.

O problema não é a criação de pastas ocultas de controle de versão dentro de tais estruturas (bem, para o svn é), mas como Marca diz na pergunta:obtendo atualização automática e atômica de arquivos adicionados ou removidos (pelo aplicativo, neste caso o iWork), para que eu não precisasse fazer isso manualmente.

Claramente, o iWork e a Apple só se incomodam com a usabilidade do iCloud.No entanto, tenho um argumento genuíno para armazenar .pages, .numbers e .keynote em um repositório Mercurial.Após a atualização, tudo desmorona.O que fazer?

Termo aditivo:

Encontrado 'hg addremove' isso faz o truque para mim.

$ hg help addremove
hg addremove [OPTION]... [FILE]...

add all new files, delete all missing files
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top