Dulwich进行的单行代码更改显示每行都不相同

时间:2018-10-02 09:58:31

标签: git dulwich

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

S:\mydir\AEL>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:\mydir\AEL>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:\mydir\AEL>git add CodingTools_SourceControl.ael

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

        modified:   CodingTools_SourceControl.ael

如果我要求提供有关阶段性更改的报告,我会看到相同的一行更改:

S:\mydir\AEL>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:\PrimeObjects\ADSO71\KEATING\AEL>git reset CodingTools_SourceControl.ael
Unstaged changes after reset:
M       AEL/ATS_SourceControl.ael
...several other unstaged changes...

我希望能够使用Dulwich来管理登台和提交。因此,在空闲状态下,reset之后,我这样做:

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

此后,git status像以前一样显示已分阶段进行的更改

S:\mydir\AEL>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:\mydir\AEL>git diff --cached --stat CodingTools_SourceControl.ael
 AEL/CodingTools_SourceControl.ael | 3082 ++++++++++++++++++-------------------
 1 file changed, 1541 insertions(+), 1541 deletions(-)

编辑:在@RomainVALERI的有用评论之后,我尝试了此命令

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

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

我尝试使用porcelain.add()代替Repo.stage()

porcelain.add(repo, r"S:\mydir\AEL\CodingTools_SourceControl.ael")

但没有任何帮助。

2 个答案:

答案 0 :(得分:1)

// ferias <?php while($row = sqlsrv_fetch_array($stmt_ferias, SQLSRV_FETCH_NUMERIC)) {?> { id: '<?php echo $row[0]; ?>', title: '<?php echo "Férias - ".utf8_encode($row[2]).""; ?>', start: '<?php echo $row[3]; ?>', end: '<?php echo $row[4]; ?>', dow: [1,4], rendering: 'background', color: '#ff9f89' }, <?php }?> 中的代码来看,Dulwich似乎不关注dulwich.index.blob_from_path_and_stat()设置,也不关注core.autocrlf文件中的任何内容,而只是逐字节写入将工作目录文件中的任何内容复制到Git数据库。

因此,如果您的团队还将使用其他了解行尾策略并以Git方式应用它们的工具,则Dulwich 0.19.5和Windows并不是很好的匹配。较新的版本可能会解决此问题,但现在是油和水。

作为一个Git初学者,我在GitHub上找到了Tim Clem的Mind the end of your line,这是我在试图理解问题并解决问题时所读的十几种内容的最清晰的解释。

答案 1 :(得分:-1)

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

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

* text=auto

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

为最小化此痛苦,您可以指定它只影响扩展。