使用 NodeGit 在存储库中执行 `git clean`
Perform a `git clean` in a repository using NodeGit
我有一个 NodeGit 存储库,repo
。这个存储库有一些本地更改,包括跟踪和未跟踪的文件和目录。我怎样才能清理这个存储库,与 git clean -f -d
命令具有相同的效果,以便之后本地更改不再存在?
感谢您的帮助。
NodeGit 是 libgit2 的包装器,它是一个 lower-level 库。它不像大多数 Git 命令那样设计用于处理大量复杂任务,因此没有 built-in 技术可以清理。这不仅仅是 NodeGit:libgit2 也缺少任何 built-in 干净的功能。
但是,尽管有一些困难,但还是可以实现的。 libgit2 提供了一种获取文件状态的方法,您可以包含未跟踪的文件并递归到忽略的目录中。未跟踪的文件将在工作树中标记为新文件,但不会为它们设置任何索引标志。然后可以删除它们。
这并没有解决清理空目录的问题,所以你必须手动跟踪哪些目录有未跟踪的文件,然后在事后检查并确定目录是否为空,如果是,去掉它。如果你还想删除空目录,那么你必须自己动手,因为状态代码不枚举目录,只枚举文件。
如果这看起来工作量很大,那确实是。 git clean
在幕后做了相当多的工作,因此手工操作必然很复杂。
我有一个 NodeGit 存储库,repo
。这个存储库有一些本地更改,包括跟踪和未跟踪的文件和目录。我怎样才能清理这个存储库,与 git clean -f -d
命令具有相同的效果,以便之后本地更改不再存在?
感谢您的帮助。
NodeGit 是 libgit2 的包装器,它是一个 lower-level 库。它不像大多数 Git 命令那样设计用于处理大量复杂任务,因此没有 built-in 技术可以清理。这不仅仅是 NodeGit:libgit2 也缺少任何 built-in 干净的功能。
但是,尽管有一些困难,但还是可以实现的。 libgit2 提供了一种获取文件状态的方法,您可以包含未跟踪的文件并递归到忽略的目录中。未跟踪的文件将在工作树中标记为新文件,但不会为它们设置任何索引标志。然后可以删除它们。
这并没有解决清理空目录的问题,所以你必须手动跟踪哪些目录有未跟踪的文件,然后在事后检查并确定目录是否为空,如果是,去掉它。如果你还想删除空目录,那么你必须自己动手,因为状态代码不枚举目录,只枚举文件。
如果这看起来工作量很大,那确实是。 git clean
在幕后做了相当多的工作,因此手工操作必然很复杂。