Я думаю, что вы видите что-то вроде этого:
$ git status
On branch master
Your branch is up to date with 'origin/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: sub (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
Чтобы понять это, вам нужно знать, что когда вы добавляете подмодуль в свой проект, git отслеживает не только то, откуда он был клонирован, но и самый последний (или выбранный )идентификатор фиксации этого подмодуля. (т. е. его ГОЛОВА ). При проверке он обязательно получает эту конкретную версию подмодуля; в противном случае вы могли бы получить несовместимую версию подмодуля при проверке старой версии вашего кода.
Git сообщает вам, что идентификатор фиксации HEAD подмодуля изменился, и что вы можете зафиксировать это изменение в родительском проекте. Если вы сделаете git diff
,вы увидите измененный идентификатор фиксации (ваши идентификаторы, конечно, будут другими):
$ git diff
diff --git a/sub b/sub
index d67371f..07bc855 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit d67371f7485a97dd4d00802619f93a0cb4d2df16
+Subproject commit 07bc855dd4d958783a686241b911aead1d73ca3c
Неважно, почему изменился идентификатор фиксации HEAD извлеченного подмодуля; оба извлекая новую версию подмодуля (через, например, git pull
в каталоге подмодуля )или локально фиксируя в каталоге подмодуля, делают одно и то же — изменяют идентификатор фиксации HEAD подмодуля, добавляя больше коммитов — как что касается родительского проекта.
Вот awk
решение, столь же быстрое, как и подход Фриппе sed
, использующий пример файла со 100 000 строк:
time awk '{print substr($0, 1, length($0)-8)}' 100k.txt
real 0m4.110s
user 0m0.142s
sys 0m0.422s
time sed "s/.\{0,8\}$//; /^$/d" 100k.txt
real 0m4.043s
user 0m1.558s
sys 0m0.345s
Замените 8
любым числом. Основное отличие здесь в том, что awk
будет печатать новую строку, если длина обрезки превышает длину строки, а sed
— нет.
Использование Raku (, ранее известного как Perl _6)
raku -ne '.trim-trailing.chop(8).put;'
ИЛИ
raku -pe '.=trim-trailing;.=chop(8);'
Пример ввода:
wxxyyyzzzz_1234.txt
aaabbbccc_7777.txt
nnhhaa_8888.txt
ayquabay_9999.txt
ayqynbnbn_1122.txt
ooppaa_3454.txt
Пример вывода:
wxxyyyzzzz_
aaabbbccc_
nnhhaa_
ayquabay_
ayqynbnbn_
ooppaa_
Обратите внимание, что оба приведенных выше ответа используют процедуру trim-trailing
Раку, чтобы избавиться от завершающих пробелов. Не стесняйтесь удалять trim-trailing
и/или изменять количество символовchop
-ped с правого -конца строки.