进行数据分析时,我总是创建多个功能,这些功能会组织在专用模块中以进行特定的分析。我使用PyCharm在python中进行编码。 经过一些代码迭代之后,这些功能中的一些功能然后可以移至更多的“通用”模块,以便以后可以用于其他分析。
保留提交历史记录确实很有用,但是当将功能从一个模块移动到另一个模块(ref on intellj,)时,git显然不会保留提交历史记录,PyCharm也对此不提供任何帮助。
我想出了以下解决方法:
因为我可以看到模块内单个功能的历史记录(ref on stackoverflow),所以我在终端中发出以下命令:
git log -L:myfunction:path / to / myfile.py --follow path / to / myfile.py >> myfunction_commit_history.txt
我将myfunction移至my_newfile(使用PyCharm GUI,但是如果通过命令行将其移至同样的情况)
我从myfunction_commit_history文件中复制提交历史记录
这不是很好,但是比失去整个提交历史更好。
高度赞赏任何建议/改进/更好的方式。
答案 0 :(得分:0)
Git中的保存提交历史记录这个短语是胡说八道。
原因是提交 are 历史记录; 但历史什么都不是。您要么拥有提交,那么所有内容都被保留,或者您没有,因此没有。
人们通常的意思是:我重命名了一些文件,但现在找不到了。这并不奇怪,因为每次Git提交只是所有文件的快照。提交A
具有文件README.txt
和starter.py
,最后提交Z
具有README.rst
和alldone.py
。如果README.rst
是沿途某处的重命名(也许还进行了修改),那么,唯一找到 的方法就是让Git从{ {1}}返回Z
返回Y
直到某个时刻(例如介于X
和M
之间)比较两次提交的内容表明, wha-hey ,N
中的README.txt
与M
中的README.rst
非常相似,因此我们称其为重命名并停止寻找N
,而开始寻找README.rst
。这就是README.txt
的作用。
如果直接从git log --follow
跳到Z
,则两个文件的内容可能相差太大而无法匹配。但这就 Git 而言还可以:如果您问我如何编辑A
中的文件,使它们看起来像A
中的文件,Git会说,删除Z
并使用这些内容创建新的README.txt
和这些说明有效。他们没有告诉您您想知道的内容,但是就Git而言,他们已经足够好了。
将功能从一个文件移动到另一个文件时,Git的某些部分(包括README.rst
)可以进行逐个提交的比较,在早期提交中搜索 all 个文件,并找到它(对于git blame
,您需要git blame
选项,而-C
是--follow
的选项)。 Git的其他部分,包括直接将早期提交与后期提交进行区分,通常是不行的:比较任何一对提交时,重命名的文件必须与git log
/ {{1 }}选项起作用。您可以 调整重命名查找阈值:-M
在没有任何阈值的情况下使用50%的相似度索引,即,两个文件中大约一半必须相同承诺让Git调用重命名操作。但是,此重命名检测还需要满足其他几个条件。通常,将功能从一个现有文件移动到另一个现有文件将导致其失败。对于--find-renames
,有时也可以使用-M
(break-pairings标志,该标志最多占用两个相似性索引值),但是这种用法的用度很快下降。