Manipulando Código Assinando em um Ambiente Controlado de Origem

8

Apenas uma pergunta rápida, espero:

Minha equipe mantém um software que usa a implantação do ClickOnce e é assinado com um certificado. Mantemos o certificado público que é realmente usado em uma máquina separada que é usada apenas para assinatura. Isso funciona bem.

Porém, quando ocasionalmente encontramos problemas, é quando alguém precisa assiná-lo localmente com um novo certificado de teste para poder construir e testar a solução. Inevitavelmente, essa nova impressão digital do certificado é transferida para o controle de versão como parte do arquivo de configurações do projeto. Isso não causa um problema na caixa de assinatura, pois suas próprias configurações de certificado nunca são enviadas para o servidor Git, portanto, as retiradas dessa máquina não substituem as alterações locais. No entanto, isso causa problemas para todos os outros, pois eles têm seu próprio certificado de teste que é usado em sua máquina local.

Existe uma maneira correta de lidar com essa situação? Talvez de alguma maneira no Git excluir alterações de apenas uma parte específica de um arquivo de configuração, e não a coisa toda?

Locke
fonte

Respostas:

9

Não há como no Git excluir alterações em apenas parte de um arquivo. No entanto, o que você geralmente pode fazer é externalizar essa parte do arquivo para um arquivo de configuração diferente e, em seguida, adicionar esse outro arquivo de configuração ao arquivo .gitignore. Isso permite que cada desenvolvedor personalize a configuração conforme necessário, mas os impede de verificar acidentalmente suas alterações e afetar outros.

Como você faz isso obviamente varia de acordo com o idioma / estrutura. Como você mencionou o ClickOnce, vou assumir que é uma solução .Net neste caso. Digamos que você tenha um web.config com o seguinte conteúdo

<signingInfo>
  <certificate path="C:\test\whatever.cert">
</signingInfo>

Você pode substituir isso por

<signingInfo configSource="signing.config">

"signature.config" é adicionado ao arquivo .gitignore. Cada desenvolvedor configura o signature.config conforme necessário localmente e não há necessidade de lembrar explicitamente de não confirmar as alterações.

Ruaidhrí Primrose
fonte
Eu realmente gosto dessa ideia. É simples e elegante. Você sabe se existe uma maneira de fazer isso quando os dados de configuração estão no próprio arquivo do projeto (como .csproj ou .vbproj). Atualmente, estou pesquisando no Google, mas continuo obtendo resultados em classes parciais, em vez de arquivos de configuração parciais.
Locke
1
Eu não tentei pessoalmente, mas você deve poder usar um elemento <Import Project = ""> no seu arquivo de projeto principal e apontar para outro arquivo de projeto que contenha a configuração específica do desenvolvedor.
Ruaidhrí Primrose
Agradável. Quatro anos trabalhando com .NET e eu nunca soube que isso era possível. Vou testá-lo. Obrigado!
Locke