相关疑难解决方法(0)

git的半秘密空树对象是否可靠,为什么没有符号名称呢?

Git有一个众所周知的,或者至少是众所周知的空树,其SHA1是:

4b825dc642cb6eb9a060e54bf8d69288fbee4904
Run Code Online (Sandbox Code Playgroud)

(你可以在任何仓库中看到这个,甚至是新创建的仓库,用git cat-file -tgit cat-file -p).

如果您努力工作并且非常小心,您可以使用这个空树来存储没有文件的目录(请参阅如何将空目录添加到git存储库的答案),尽管这不是一个好主意.

它作为一个参数更有用git diff-tree,其中一个示例钩子可以做到.

我想知道的是,

  1. 这有多可靠 - 即,某些未来版本的git没有编号的git对象4b825dc642cb6eb9a060e54bf8d69288fbee4904
  2. 为什么空树没有符号名称(或者有一个?).

(创建符号名称的快速而肮脏的方法是将SHA1放入,例如,.git/Nulltree不幸的是,您必须为每个repo执行此操作.似乎更好地将幻数放在脚本中等等.我只是有一般的厌恶到魔术数字.)

git

107
推荐指数
2
解决办法
2万
查看次数

试图了解`git diff`和`git mv`重命名检测机制

这是我之前提出的另一个问题的后续措施。

正在编辑之前,最初创建的文件something被重命名为somethingelse可观察到这里

git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)

该文件somethingelse然后得到重命名回something第二VIM编辑之前:

git mv somethingelse something
Run Code Online (Sandbox Code Playgroud)

基本上在代码的以下部分中

git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)

如果在这一点上我添加abc到代码中,我们将最终得到:

First line of code. abc
Run Code Online (Sandbox Code Playgroud)

我认为这是第1行增加了4个字节,而这又将在此结束:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   something
        deleted:    somethingelse
Run Code Online (Sandbox Code Playgroud)

然后,如果我们添加换行符并在第三行中键入abc(也应为4个字节,如果有错,请更正我):

First line of code.

abc
Run Code Online (Sandbox Code Playgroud)

突然,Git会检测到重命名(包括编辑):

On branch master
Changes to be committed:
  (use "git reset HEAD …
Run Code Online (Sandbox Code Playgroud)

git github git-diff git-status git-mv

3
推荐指数
1
解决办法
440
查看次数

标签 统计

git ×2

git-diff ×1

git-mv ×1

git-status ×1

github ×1