我认真地开始认为我需要分叉一个开源项目,以满足我自己的需求。我已经向原作者发送了补丁,但回复非常简洁,而且不受欢迎。
总之。我已经阅读了问题Forking an open source project nicely,但这并没有回答我更具体的问题:
我该怎么处理这些文件?
首先,我应该继续使用origninal Git存储库,还是只丢弃所有历史记录,然后重新开始(“rm -rf .git && git init
”)?其次,有没有关于旧自述文件的意见:s,以前的版本信息和版本控制?
当然,许可和归属将根据许可证的要求进行处理。
答案 0 :(得分:8)
历史是源代码控制中最有价值的部分。我会说保留历史,只标出你自己的发展开始的地方。
答案 1 :(得分:6)
我保留历史的原因:
git bisect
而导致的错误 - 你可能会发现你认为无害的变化实际上是至关重要的。这是bisect
很容易找到的东西,没有它就很难找到。没有历史,你不能这样做。如果这些都不适用,您可能想重新开始。但即使你这样做,也要将历史保存在私人副本中。如果您需要它,您可以从新的存储库中移植您的更改并执行上述所有操作。
答案 2 :(得分:5)
应该是非常轻松的,除非你从头开始重写所有内容,否则这是正确的方法。
答案 3 :(得分:3)
即使您从未计划将补丁发送回原作者,git
也会制作精彩的本地版本控制工具。
关于github的另一个很酷的事情,作为之前发布的其他一些工作流程的附录:
git clone
您的新回购邮箱如果你得到项目作者的蹩脚回应,那么他们并不完全值得你的帮助,我想你不应该过分担心回馈。但是,仍然按照关于您的Fork Queue的步骤#4 - 您可以与github上的所有其他人保持同步,并与您一起对项目进行更改。
快速补充:如果你想让你的作品与原作者分开,那么很容易:
*创建一个新分支(git checkout -b my_branch_name
)并在那里工作
*在您想要的状态下拥有该分支后,您可以切换回原始分支(git checkout master
)并将更改合并回(git merge my_branch_name
)。
*然后你可以把它推回到github(git push origin master
),或者
*为原作者制作补丁(使用某些版本的git format-patch
)。
答案 4 :(得分:2)
正如其他人所指出的那样:你应该保留历史。关于README和版本控制:您应该重命名项目以避免与原始项目混淆。您可以使用暗示原始项目的名称(但要注意潜在的商标问题),但尽量不要无礼。例如,如果原始项目名为“foo”,则命名为项目“foo-ng”(下一代)将以某种方式表明您的项目比另一个项目“更好”。即使你觉得情况确实如此,也不要这样做。
应根据您的需求更新README。即它应该记录新项目名称,事实上它是项目“foo”的分支,可能是它分叉的点。就个人而言,我还会保留ChangeLogs和类似的,技术更为面向的文档,并在必要时附加到它们,但是开始新的任何“新闻”式文档,即针对最终用户的文档。
答案 5 :(得分:1)
如果您打算进行完全重写,请使用刚刚初始化的git。除此之外,只需做一个克隆。
答案 6 :(得分:1)
如果您实际上正在分叉(从原始项目停止的地方开始),请务必克隆原始存储库并继续提交。这不仅允许您合并原始存储库中的更改,还允许原始项目的开发人员从您的fork合并更改。如果两个项目都在Github上,那么这种协作将更加容易(拉取请求)。
这应该是非常自然的,因为您应该在存储库中进行更改并发送补丁或拉取请求。分叉是相同的,除了它被标记为一个单独的项目。