我想使用替代索引文件在同一个 Git 存储库中创建一个具有独立历史记录的完全独立的文件系统结构,就像git notes
.
为了使这更容易,我希望能够获取任意目录并将git add
其放入(备用)索引文件并将其提交,就好像它是工作树的根一样。
例如假设我的目录结构如下:
.
└── subdir
└── hello.txt
1 directory, 1 file
如果我正常运行git add subdir
,我的索引将如下所示:
git ls-files -s
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0 subdir/hello.txt
相反,我希望我的索引看起来像这样:
git ls-files -s
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0 hello.txt
git 中是否存在现有机制,可以将用户指定的目录添加到索引文件,就好像它是根目录一样,或者我唯一的选择是使用管道命令,例如update-index
手动将每个文件添加到适当(相对)路径的索引中?
添加后
subdir
,您可以为其创建一个树对象。它创建一个树对象,表示里面
subdir
添加的所有内容,并返回该对象的哈希值。假设它是2e81171448eb9f2ee3821e3d447aa6b2fe3ddba1
。然后您可以从这棵树创建一个提交,这样该树就是提交的根树。您还可以使用一个或多个
-p $parent_commit
来指定新提交的父提交。多个参数的顺序-p
也是所创建提交的父提交的顺序。它只是创建一个提交,不会更新任何引用或更新工作树。此外
git write-tree
,您可以git commit
先运行以创建提交,这样就subdir
创建了的树对象。要检查修订中的树对象的哈希值,获取树形哈希后,您可以使用它
commit-tree
来创建提交。实际上,您可以直接使用它,git commit-tree $revision:$path
而不必获取 first 的值$revision:$path
。是的,你当然可以这样做。
GIT_INDEX_FILE
在环境中指定你的自定义清单,并且自定义工作树根足够常见,有一个选项,,--work-tree
这比覆盖更方便一次性使用GIT_WORK_TREE
。因此,要提交任意路径,假设refs/sideband/merlin
你会編輯:需要
--absolute-git-dir
如上所述,您可以使用 git ceramic 命令连接您自己的树。
根据您的要求,其他选项可以是
subtree
或submodule
。git submodule
将允许您在外部存储库中管理“外部”代码,git subtree
可以让你管理独立分支(与主分支分离)但还不完全清楚你想做什么