Quero usar um arquivo de índice alternativo para criar uma estrutura de sistema de arquivos completamente independente com um histórico independente no mesmo repositório Git, no estilo git notes
.
Para facilitar isso, gostaria de poder pegar um diretório arbitrário e git add
colocá-lo em um arquivo de índice (alternativo) e confirmá-lo como se fosse a raiz da árvore de trabalho.
Por exemplo, suponha que minha estrutura de diretório seja a seguinte:
.
└── subdir
└── hello.txt
1 directory, 1 file
Se eu executasse git add subdir
normalmente, meu índice ficaria assim:
git ls-files -s
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0 subdir/hello.txt
Em vez disso, quero que meu índice fique assim:
git ls-files -s
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0 hello.txt
Existe algum mecanismo no git para adicionar um diretório especificado pelo usuário ao arquivo de índice como se fosse o diretório raiz , ou minha única opção é usar comandos de encanamento, como update-index
adicionar manualmente cada arquivo ao índice no caminho apropriado (relativo)?
Depois de adicionar
subdir
, você pode criar um objeto de árvore para ele.Ele cria um objeto de árvore que representa tudo adicionado dentro de
subdir
, e retorna o hash do objeto. Suponha que seja2e81171448eb9f2ee3821e3d447aa6b2fe3ddba1
. E então você pode criar um commit dessa árvore, de modo que a árvore seja a árvore raiz do commit.Você também pode usar um ou mais
-p $parent_commit
para especificar commits pai para o novo commit. A sequência dos múltiplos-p
parâmetros também é a sequência dos commits pai do commit criado. Ele apenas cria um commit e não atualiza nenhuma ref ou atualiza a worktree.Além disso
git write-tree
, você pode simplesmente executargit commit
para criar um commit primeiro, para que o objeto de árvoresubdir
seja criado. Para inspecionar o hash de um objeto de árvore em uma revisão,Após obter o hash da árvore, você pode usar
commit-tree
para criar um commit. Na verdade, você pode usar diretamentegit commit-tree $revision:$path
em vez de obter o valor de$revision:$path
first.Sim, você certamente pode fazer isso.
GIT_INDEX_FILE
no ambiente especifica seu manifesto personalizado, e uma raiz de árvore de trabalho personalizada é comum o suficiente, há uma opção para ela,--work-tree
, que é mais conveniente para one-offs do que aGIT_WORK_TREE
substituição. Então, para cometer um caminho arbitrário para dizerrefs/sideband/merlin
que vocêedição: necessário
--absolute-git-dir
Como mencionado acima, você pode conectar sua própria árvore com comandos git porcelain.
Outra opção, dependendo de suas necessidades, pode ser
subtree
ousubmodule
.git submodule
permitirá que você gerencie seu código "externo" em um repositório externo,git subtree
permitirá que você gerencie uma ramificação autônoma (separada da sua ramificação principal)Mas não está completamente claro o que você deseja fazer