在ImageJ和相关的SciJava项目中,我们广泛使用GitHub,这是一个免费托管open source项目的网站。
以下是如何更有效地通过 GitHub 进行交互的一些技巧:
参考源码
GitHub 提供了非常强大的方法来引用特定的代码行。不仅如此,它还提供了强大的方法来查找那些特定的代码行。
快速查找文件
将Web浏览器指向特定存储库后,输入↵ Enter键可以让您键入部分文件名,然后当相关文件位于列表顶部时按T(您也可以使用光标键导航列表)。
链接到特定行
按⇧ Shift键可以跳转到特定行(并修改URL,然后您可以将该URL发送到引用该行)。
选择一行后,您可以通过L-单击行范围另一端的行号来选择行范围。
固定链接
找到相关文件的链接后,它很可能指该文件的当前版本。
然而,一旦开发进展,文件的内容可能会发生变化,甚至文件可能会消失!要提供指向文件特定版本的链接,只需按修改Y同时按键将 URL 为永久链接(将会引用有意的提交,然后是分支)。
忽略差异中的空白变化
有时,提交空白更改与其他更改混合在一起,从而使功能更改更难以隔离。幸运的是,有一个简单的解决方法:
- 在命令行上,Git understands the
-wflag 忽略空格更改。 - GitHub 也提供相同的功能:只需将
?w=1附加到 URL(如果已经有 GET 参数,则附加&w=1)。
编辑文件
如果您想修改某些文件的内容,并且确定不需要在本地测试更改,则可以在导航到相关文件后按右上角的§§8§§§按钮(如果您没有相关存储库的Push权限,这将同时fork项目)。这将允许您在线编辑文件并在提供提交消息后提交更改(当然,您仍然应该尝试编写meaningful commit message)。
处理拉取请求
Pull 请求是一种非常修复的协作方式。这个想法是,Git 使得高效克隆项目的整个修订的历史记录、进行一些开发,然后以一种易于原始项目的开发人员合并的方式提供改进变得非常容易和。
常用工作流程
假设您想要修复您最喜欢的第§§17§§§插件中的一个令人烦恼的错误。第一件事是“分叉”它 - 意味着将整个修订的历史记录到您的个人GitHub空间 - 不必已经这样做了。然后将其克隆到您的计算机上(再次强调,如果您已经了)。进行更改、提交、,然后发出转发拉取复制请求。请参阅页面How to contribute to an existing plugin or library确定您详细的演练。
在合并拉取请求之前测试它们
GitHub 让合并 Pull 请求变得非常容易,只需按一个按钮即可。当然,您应该在这样做之前检查更改:请记住,开源软件的质量同步很高,因为只是许多开发人员将他们积累的专业知识结合在一起,才能做出比每个开发人员自己开发的更好的东西。
您甚至可能想在合并之前在本地测试代码。这非常简单,因为 GitHub 不仅提供了 Pull Request 是否可以干净合并的测试,而且还提供了 refs/pull/
请注意,这些α分支(在 Git Speak 中称为“refs”)不会自动获取或克隆,它们必须“显式”获取。
示例:假设您想要测试Pull Request number #6 of the SPIM Registration plugin。您可以这样获取并检查标记暂定合并结果的α分支:
git fetch origin refs/pull/6/merge
git checkout FETCH_HEAD
请注意
-阑调用git fetch时,FETCH_HEAD都会被覆盖
FETCH_HEAD并不是真正指代分支,你最终会得到一个未命名的分支,该分支在获取时未更新- 测试后,您应该使用
git checkout main切换回 main - 一旦 Pull Request 被合并,α分支将反映最终的合并结果,而不是暂定的结果。