LGit é um plugin de controle de código fonte (SCC) que integra a funcionalidade do Git em Ambientes de Desenvolvimento Integrado (IDEs) que suportam a API SCC (Source Code Control) da Microsoft. Ele atua como uma ponte, permitindo que o IDE execute operações Git comuns (como commit, push, pull, branch, merge, diff, histórico) através de sua interface de usuário padrão para controle de versão. O projeto utiliza a biblioteca libgit2 para todas as interações com repositórios Git.
Este projeto parece ser mais antigo, utilizando arquivos de projeto do Visual Studio como .dsp e .dsw, e implementando a versão 1.3 da API SCC.
- Integração com IDEs via API SCC: Permite que IDEs compatíveis gerenciem repositórios Git.
- Operações Git Fundamentais:
- Inicializar (
init) e Clonar (clone) repositórios. - Adicionar (
add) arquivos ao stage. - Realizar Commit (
commit) de alterações. - Visualizar Status (
status) de arquivos. - Visualizar Histórico (
log) de commits. - Comparar Diferenças (
diff) entre versões de arquivos ou commits. - Gerenciar Branches (
branch): criar, listar, trocar. - Mesclar Branches (
merge). - Aplicar Patches (
apply). - (Potencialmente) Operações remotas como
fetch,pull,push(a extensão exata depende da implementação dos callbacks remotos).
- Inicializar (
- Interface de Usuário:
- Utiliza caixas de diálogo nativas do Windows para interações como clone, commit, seleção de branch, etc.
- Fornece um explorador Git independente (
LGitStandaloneExplorer).
- Logging: Capacidade de registrar informações de depuração para diagnóstico.
O LGit opera como uma DLL carregada pelo IDE. O fluxo de comunicação é geralmente:
- IDE: O usuário interage com as opções de controle de versão do IDE.
- API SCC: O IDE traduz essas ações em chamadas para as funções da API SCC (ex:
SccOpenProject,SccCommit,SccQueryInfo). - LGit (Plugin):
- Implementa as funções da API SCC (definidas em
scc_1_3.h). - Gerencia o contexto do projeto Git (
LGitContext), incluindo o ponteiro para o repositóriolibgit2. - Traduz as chamadas da API SCC e os parâmetros do IDE em operações
libgit2. - Converte dados entre formatos (ex: ANSI para UTF-8 para caminhos de arquivo).
- Apresenta caixas de diálogo para entrada do usuário quando necessário.
- Implementa as funções da API SCC (definidas em
- libgit2: A biblioteca C executa as operações Git no repositório.
- LGit (Plugin): Retorna os resultados (ou erros) da
libgit2para o IDE através da API SCC.
LGit.cpp/LGit.h: Ponto de entrada principal da DLL. Implementa funções de inicialização/desinicialização da API SCC (SccInitialize,SccUninitialize).LGit.hdefine estruturas centrais comoLGitContexte macros de exportação.project.cpp: Lida com a abertura (SccOpenProject), fechamento (SccCloseProject) e obtenção de informações do projeto Git (SccGetProjPath). Contém lógica para localizar ou inicializar repositórios.query.cpp: ImplementaSccQueryInfoeSccPopulateListpara fornecer ao IDE o status dos arquivos (controlado, modificado, não versionado, etc.) usandogit_status_foreach_ext.caps.cpp: ImplementaSccGetCapseSccGetExtendedCapabilitiespara informar ao IDE sobre as funcionalidades suportadas pelo provedor.commit.cpp(ecommitmk.cpp,commitvw.cpp): Gerencia a lógica de commit (check-in), incluindo a interface do usuário para mensagens de commit.clone.cpp: Implementa a funcionalidade de clonagem de repositórios remotos, incluindo uma caixa de diálogo.diff.cpp/diffwin.cpp: Lida com a visualização de diferenças entre arquivos e revisões.branch.cpp/merge.cpp: Fornece funcionalidades para gerenciamento e mesclagem de branches.stage.cpp: Gerencia o "stage" (índice) do Git, permitindo adicionar e remover arquivos do stage.history.cpp: Responsável por buscar e exibir o histórico de commits.apply.cpp: Implementa a funcionalidade de aplicar patches a partir de arquivos.diffou.patch.path.cpp: Utilitários para manipulação de caminhos de arquivo, incluindo normalização e conversão entre separadores de diretório.logging.cpp: Fornece a funçãoLGitLogpara registrar mensagens.winutil.cpp: Funções utilitárias específicas para a GUI do Windows.resource.h/LGit.rc: Definições de recursos da interface do usuário (caixas de diálogo, strings, ícones).scc_1_3.h: Arquivo de cabeçalho que define a interface da API SCC da Microsoft (versão 1.3).
- API SCC da Microsoft (versão 1.3): Para integração com o IDE.
- libgit2: Biblioteca C para interagir com repositórios Git. As funções
git_*são usadas extensivamente.
O projeto parece ser configurado para ser compilado com uma versão mais antiga do Microsoft Visual Studio (dado os arquivos .dsp e .dsw).
- Pré-requisitos:
- Microsoft Visual Studio (versão compatível com arquivos
.dsp, ex: VC++ 6.0 ou Visual Studio .NET 2002/2003). - Biblioteca
libgit2(cabeçalhos e arquivos.lib) devidamente configurada nas opções do projeto (include paths, library paths).
- Microsoft Visual Studio (versão compatível com arquivos
- Compilação:
- Abrir o arquivo de workspace
LGit.dswno Visual Studio. - Selecionar a configuração de compilação desejada (ex: Debug, Release).
- Compilar o projeto (Build Solution).
- Abrir o arquivo de workspace
A saída principal será uma DLL (provavelmente LGit.dll) que pode ser registrada e usada por IDEs compatíveis com SCC.
Este projeto é licenciado sob a GNU General Public License (GPL), versão 2, conforme indicado no arquivo COPYING.txt.
- Modernização: Atualizar o projeto para usar versões mais recentes do Visual Studio e, possivelmente, uma API de integração mais moderna se o objetivo for suportar IDEs mais novos.
- Tratamento de Strings: Garantir o tratamento robusto de codificação de caracteres entre o IDE (geralmente ANSI/MBCS em IDEs mais antigos) e
libgit2(UTF-8). - Gerenciamento de Erros: Melhorar o mapeamento de erros da
libgit2para códigos de erro SCC e fornecer feedback claro ao usuário. - Operações Remotas: Expandir e robustecer o suporte para operações remotas (fetch, pull, push), incluindo autenticação e tratamento de progresso.
- Testes: Implementar um conjunto de testes unitários e de integração para garantir a estabilidade.