德威上演的单行代码更改显示每行都不同

  • 本文关键字:显示 代码 单行 git dulwich
  • 更新时间 :
  • 英文 :


我有一个单行更改的文件:git status报告

S:mydirAEL>git status CodingTools_SourceControl.ael
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified:   CodingTools_SourceControl.ael
no changes added to commit (use "git add" and/or "git commit -a")

这是diff报告的变化

S:mydirAEL>git diff CodingTools_SourceControl.ael
diff --git a/AEL/CodingTools_SourceControl.ael b/AEL/CodingTools_SourceControl.ael
index 7ae86d7..fd53caa 100644
--- a/AEL/CodingTools_SourceControl.ael
+++ b/AEL/CodingTools_SourceControl.ael
@@ -22,7 +22,7 @@ import ael
import acm
is_64_bit = True
-# Special-purpose overrides
+# Special-purpose overrides. These deliberately require minor code changes.
#CodingTools_PyLint.VERBOSE = True
#CodingTools_PyLint.PYLINTRC = "default.pylintrc"

现在我暂存我的更改:

S:mydirAEL>git add CodingTools_SourceControl.ael
S:mydirAEL>git status CodingTools_SourceControl.ael
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified:   CodingTools_SourceControl.ael

如果我要求报告分阶段更改,我会看到相同的单行更改:

S:mydirAEL>git diff --cached CodingTools_SourceControl.ael
diff --git a/AEL/CodingTools_SourceControl.ael b/AEL/CodingTools_SourceControl.ael
index 7ae86d7..fd53caa 100644
--- a/AEL/CodingTools_SourceControl.ael
+++ b/AEL/CodingTools_SourceControl.ael
@@ -22,7 +22,7 @@ import ael
import acm
is_64_bit = True
-# Special-purpose overrides
+# Special-purpose overrides. These deliberately require minor code changes.
#CodingTools_PyLint.VERBOSE = True
#CodingTools_PyLint.PYLINTRC = "default.pylintrc"

现在我取消暂存更改

S:PrimeObjectsADSO71KEATINGAEL>git reset CodingTools_SourceControl.ael
Unstaged changes after reset:
M       AEL/ATS_SourceControl.ael
...several other unstaged changes...

我希望能够使用德威来管理暂存和提交。所以在 Idle 内部,在reset之后,我这样做:

>>> from dulwich.repo import Repo
>>> repo = Repo(br"S:mydir")
>>> repo.stage([br"AELCodingTools_SourceControl.ael"])

之后,git status像以前一样分阶段显示更改

S:mydirAEL>git status CodingTools_SourceControl.ael
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified:   CodingTools_SourceControl.ael

但是,如果我现在发出git diff命令,我会得到一个差异报告,其中显示文件的所有 1500+ 行都已更改:

S:mydirAEL>git diff --cached --stat CodingTools_SourceControl.ael
AEL/CodingTools_SourceControl.ael | 3082 ++++++++++++++++++-------------------
1 file changed, 1541 insertions(+), 1541 deletions(-)

编辑:跟进@RomainVALERI的有用评论,我尝试了这个命令

S:mydirAEL>git diff --cached --stat --ignore-cr-at-eol CodingTools_SourceControl.ael
AEL/CodingTools_SourceControl.ael | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

它报告一行已更改。所以这是一个行尾问题。但是我需要德威操作与命令行操作互换。我如何告诉德威Repo.stage()git add那样对待行尾?

我尝试使用porcelain.add()而不是Repo.stage()

porcelain.add(repo, r"S:mydirAELCodingTools_SourceControl.ael")

但这没有任何帮助。

dulwich.index.blob_from_path_and_stat()中的代码来看,德威似乎不注意core.autocrlf设置,也不注意.gitattributes文件中的任何内容,只是将工作目录文件中任何内容的副本逐字节写入 Git 数据库。

因此,如果您的团队还将使用其他了解行结束策略并以 Git 方式应用它们的工具,那么 Dulwich 0.19.5 和 Windows 就不是一个很好的匹配。后来的版本可能会很好地解决这个问题,但现在它是油和水。

作为一个 Git 初学者,我发现 GitHub 的 Tim Clem 的 Mind the End of Your Line 是我在试图理解问题和解决问题时阅读的十几个最清晰的解释。

您可以通过在文件中指定规则来控制行尾.gitattributes- 有关详细信息,请参阅 https://git-scm.com/docs/gitattributes

每当我创建新的源存储库时,我总是使用具有以下内容的内容:

* text=auto

因为,稍后引入它会带来一些痛苦,尤其是当您的存储库与团队共享时 - 因为它会更改所有(或大多数(文件,此外,此更改出现在新签出后,而不是在当前工作副本上。

若要最大程度地减少这种痛苦,可以指定它仅影响扩展。

相关内容

  • 没有找到相关文章

最新更新