У меня есть файл с изменением в одну строку: 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...
Я хочу иметь возможность использовать Далвич для управления постановкой и фиксацией.Поэтому внутри Idle, после 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(-)
, и она сообщает об изменении одной строки.Так что это проблема конца строки.Но мне нужно, чтобы операции Дульвича были взаимозаменяемыми с операциями командной строки.Как я скажу Далвичу Repo.stage()
обработать окончания строк так, как это делает git add
?
Я пытался использовать porcelain.add()
вместо Repo.stage()
porcelain.add(repo, r"S:\mydir\AEL\CodingTools_SourceControl.ael")
, но это не помоглопомочь любому.