草庐IT

python - merge 期间在 Git 中集成缩进和内容更改 : Best practices?

coder 2023-06-25 原文

我正在使用 Git 来跟踪一些 matlab 代码。玩具示例最能说明问题。到目前为止,该项目看起来像这样。

    C
   /
A--
   \
    B

A 的内容是 x=5

我们提交 C,其中行更改为 x=6

然后我们进行提交 B,我们的内容如下所示

if flag==1
    x=5
end

如果我们尝试与项目的目标 merge

    C
   / \
A--   D
   \ /
    B

D 中的 merge 结果会产生冲突,因为两者的主线都已更改(B 中添加了缩进,C 中将 5 更改为 6)。

是否有最佳实践方法来整合来自一个分支的缩进更改和来自另一个分支的内容更改,以获得 merge 结果?

我在 https://stackoverflow.com/a/5262473/288545 中读到过一种策略, 虽然这可以避免冲突,但它会放弃缩进以支持内容更改(这是一种改进,但仍然会使代码更难阅读)。

我想我可以接受它并且在编写代码时不更改缩进。这使得它的可读性降低,但在 matlab 中并不是什么大问题。然而,在 python 中,缩进确实很重要,那么 python 人如何处理它呢?如果我们稍后将大块代码更改为位于控制结构内部,这将变得更加丑陋,因此差异会涉及很多行并使 merge 冲突成为一个令人头疼的问题。

是否有一种 merge 策略可以分别处理间距变化和内容变化,然后将它们整合?我希望 merge 的结果是

if flag==1
    x=6
end

最佳答案

解决问题的关键是将空白清理和函数重写视为单独的提交。

作为一个经常进行分支集成的人,我可以诚实地说,对于集成商来说,最烦人的两件事是:1) 喜欢重新格式化不是他们编写的文件或他们没有重写的函数的编码人员,以及 2)只需打开和保存文件即可重新格式化整个文件的 IDE。当然,在这两种情况下文件都更具可读性,但这完全违背了版本控制的 Gist :提交应该智能地调整大小、构建和审查。他们的命令应该有意义。厨房水槽提交会产生无用的历史记录,而历史记录应该只是有用的。

这种理念意味着“不要将空白更改转储到不属于它们的提交中”。如果您要重写 touched 函数,当然可以改进间距。否则将其留给自己提交,并确保处理该文件的其他人知道即将进行空白更改。这将使您在集成时省去麻烦。

此外,您可以使用 git 的 stock 预提交 Hook 避免意外的空白错误(尾随空格、空格后的制表符等)。在您的存储库中发出此命令以进行设置:

mv .git/hooks/pre-commit.sample .git/hooks/pre-commit

它或多或少会发出 git diff --check 问题,这对于检测这些类型的问题也非常有用。

关于python - merge 期间在 Git 中集成缩进和内容更改 : Best practices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376550/

有关python - merge 期间在 Git 中集成缩进和内容更改 : Best practices?的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  4. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  5. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  6. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  7. ruby-on-rails - 在默认方法参数中使用 .reverse_merge 或 .merge - 2

    两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option

  8. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  9. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  10. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

随机推荐