git-deps é uma ferramenta para realizar análises automáticas de dependências entre commits em um repositório Git. Aqui está uma demonstração de screencast:

Eu escrevi no blog sobre git-deps e ferramentas relacionadas, e também falei publicamente sobre a ferramenta várias vezes:
É bastante claro que dois começos do Git em um único repositório podem ser considerados "independentes" um do outro em certo sentido, se não alterarem os mesmos arquivos ou se não alterarem partes sobrepostas dos mesmos arquivos.
Por outro lado, quando uma confirmação altera uma linha, depende "não apenas do compromisso que mudou pela última vez essa linha, mas também de quaisquer começos responsáveis por fornecer as linhas de contexto circundantes, porque sem as versões anteriores da linha e seu contexto, o diferencial do Commit pode não se aplicar de maneira limpa (dependendo de como está sendo aplicado, é claro). Portanto, todas as dependências de uma confirmação podem ser deduzidas programaticamente executando a culpa do Git nas linhas que as alterações do compromisso, além de muitas linhas de contexto, fazem sentido para o caso de uso dessa análise de dependência específica.
Portanto, o cálculo da dependência é impactado por um parâmetro de fator "fuzz" (patch de CF (1)), ou seja, o número de linhas de contexto que são consideradas necessárias para que o diferencial do Commit's se aplique de maneira limpa.
Como em muitas relações de dependência, essas dependências formam bordas em um DAG (Gráfico acíclico direcionado) cujos nós correspondem aos compromissos. Observe que um nó só pode depender de um subconjunto de seus ancestrais.
É importante estar ciente de que qualquer gráfico de dependência inferido pelos git-deps pode ser semanticamente incompleto; Por exemplo, ele não detectaria dependências automaticamente entre um comprometimento A que altera o código e outro Commit B, que altera a documentação ou os testes para refletir as alterações do código no comprometimento A. Portanto, git-deps não deve ser usado com fé cega. Para mais detalhes, consulte a seção sobre dependência textual vs. semântica (in) abaixo.
Às vezes, é útil entender a natureza das partes desse gráfico de dependência, pois sua natureza afetará o sucesso ou a falha das operações, incluindo mesclagem, rebase, pick-pick etc. Consulte o arquivo de USE-CASES.md para obter mais detalhes.
Consulte o arquivo INSTALL.md .
Consulte o arquivo USAGE.md
Os leitores astutos observarão que a independência textual detectada pelo git-deps não é a mesma que a independência semântica / lógica. A independência textual significa que as alterações podem ser aplicadas em qualquer ordem sem incorrer em conflitos, mas esse não é um indicador confiável de independência lógica.
Por exemplo, uma alteração para uma função e alterações correspondentes nos testes e/ou documentação para essa função normalmente existem em arquivos diferentes. Portanto, se essas alterações estivessem em compromissos separados dentro de uma ramificação, a execução git-deps nas confirmações não detectaria nenhuma dependência entre elas, mesmo que estejam logicamente relacionadas, porque as alterações em arquivos diferentes (ou mesmo em diferentes áreas dos mesmos arquivos) são textualmente independentes.
Portanto, neste caso, git-deps não se comportaria exatamente como poderíamos querer. E enquanto a IA for um problema não resolvido, é muito improvável que ela desenvolva um comportamento totalmente confiável. Então, isso significa que git-deps é inútil? Absolutamente não!
Em primeiro lugar, quando as práticas recomendadas para a estruturação são seguidas, as mudanças que são fortemente relacionadas logicamente devem ser colocadas dentro da mesma confirmação de qualquer maneira. Portanto, no exemplo acima, uma alteração para uma função e alterações correspondentes nos testes e/ou documentação para essa função devem estar dentro de uma única confirmação. (Embora essa não seja a única abordagem válida; para um mecanismo de agrupamento de meta-histórico mais avançado, consulte git-dendrify .)
Em segundo lugar, embora a independência textual não implique independência lógica, espera -se que o inverso seja mais comum: a independência lógica geralmente implica independência textual (ou declarou outra maneira, a dependência textual geralmente implica dependência lógica). Portanto, embora possa não ser muito incomum para git-deps deixar de detectar a dependência entre alterações relacionadas logicamente, deve ser mais raro que ele infere incorretamente uma dependência entre alterações logicamente não relacionadas. Em outras palavras, seus falsos negativos geralmente devem ser mais comuns do que seus falsos positivos. Como resultado, é provável que seja mais útil na determinação de um limite inferior às dependências do que um limite superior. Dito isto, mais pesquisas são necessárias sobre isso.
Em terceiro lugar, muitas vezes é inútil permitir que a busca pelo perfeita se torne o inimigo do bem - uma ferramenta não precisa ser perfeita para ser útil; Ele só precisa ser melhor do que executar a mesma tarefa sem a ferramenta.
Mais discussões sobre alguns desses pontos podem ser encontradas em um tópico antigo da lista de discussão Git.
Em última análise, porém, "a prova está no pudim", então experimente e veja!
Consulte o arquivo CONTRIBUTING.md .
Consulte o arquivo HISTORY.md .
Agradecimentos especiais ao SUSE por patrocinar parcialmente o desenvolvimento deste software. Agradecemos também a todos que contribuíram com código, relatórios de bug e outros comentários.
Lançado no GPL versão 2 para ser consistente com a licença do git , mas estou aberto à idéia de licenciamento duplo se houver um motivo convincente.