- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在做一个项目,我们想编辑 Twitter Bootstrap 附带的 LESS 文件。 standard advice是让这些文件保持不变,以便更容易升级 Bootstrap。但是这个建议对我们不起作用;我们的代码变得脆弱且难以维护。
似乎应该可以通过 git 子树 merge 来解决这个问题:我们可以编辑 Bootstrap 的 LESS 文件以获得清晰、可维护的代码,然后使用 git 的 merge 工具引入新版本的 Bootstrap。
我们已经提出了使用子树 merge 的计划。但在我们将计划付诸实现之前,我想得到一些反馈:是否有我们忽略的重大缺陷?有更好/更简单的方法吗?
在simplest approach对于子树 merge ,来自子树(即 Bootstrap)的所有提交都被 merge 到项目的 master
分支中。缺点是 Bootstrap 有太多的提交,我们的提交在噪音中迷失了。我们想让他们的提交远离我们的 master
分支。
理论上,我们可以使用 git rebase -i
将所有 Bootstrap 提交压缩为一个提交,然后我们将其 merge 到 master
中。但是 rebase -i
does not work well with merges .
@Sigi helpfully suggested我们使用 squash merge 从 bootstrap-upstream
到 master
。抓取初始版本的 Bootstrap (v3.1.0) 工作正常。但是当我们在下一个版本(v3.1.1)中 merge 时,我们有超过 100 个 merge 冲突。 3.1.0 和 3.1.1 之间的每个 Bootstrap 更改都被标记为冲突。 (我们的确切步骤在 this gist 中。)
我们的计划是使用一个分支,merge-from-bootstrap
,将 Bootstrap 提交 pull 入我们的存储库。当 merge 更改 in 到 merge-from-bootstrap
(我们对 master
的更改,或 Bootstrap 的更改)时,始终记录 merge 。当 merge out from merge-from-bootstrap
到 master
时,使用 git merge --squash
以便 merge 没有记录。
我们的希望是:
master
保持可管理性,因为 Bootstrap 提交永远不会成为该分支的一部分。merge-from-bootstrap
分支拥有我们更改和 Bootstrap 团队更改的完整历史记录。在接下来的步骤中,我们获取 Bootstrap v3.1.0,进行一些更改,然后升级到 v3.1.1。 POC 似乎运行良好(就像我对真实存储库的测试一样),但我想知道我们是否正在为自己设置麻烦。
从一个新的 repo 开始,其中唯一的文件是 README.md
(即 GitHub 为您提供的新 repo)。
# Add bootstrap as a remote
git remote add bootstrap https://github.com/twbs/bootstrap.git
# Only fetch the master branch; don't fetch tags
git config remote.bootstrap.fetch +refs/heads/master:refs/remotes/bootstrap/master
git config remote.bootstrap.tagopt --no-tags
git fetch bootstrap
# Start with Bootstrap v3.1.0
git checkout -b merge-from-bootstrap
# SHA is the commit tagged v3.1.0 from the bootstrap repo
git merge -s ours --no-commit 1409cde7e800ca83fd761f87e5ad8f0d259e38d1
git read-tree -u --prefix=bootstrap/ 1409cde7e800ca83fd761f87e5ad8f0d259e38d1
git commit -am "Bootstrap v3.1.0"
# Merge Bootstrap 3.1.0 to master
git checkout master
git merge --squash merge-from-bootstrap
git commit -am "Merge bootstrap v3.1.0 to master"
# Make some changes on master, so that we have something to
# be merged
sed -e 's/= space/= force-merge-conflict/g' -i '' bootstrap/.editorconfig
git commit -am "Force a merge conflict"
sed -e 's/"Helvetica Neue"/"Comic Sans"/g' -i '' bootstrap/less/variables.less
git commit -am "Comic Sans"
# Get ready to upgrade to the new version of Bootstrap
git checkout merge-from-bootstrap
git merge -s recursive -Xtheirs master
# Merge in Bootstrap v3.1.1 from bootstrap/master to
# merge-to-bootstrap. (SHA is for v3.1.1 from the bootstrap repo)
git merge -s recursive -X subtree=bootstrap --no-commit a365d8689c3f3cee7f1acf86b61270ecca8e106d
# Fix the merge conflict, then do:
git commit -am "Merged in Bootstrap v3.1.1"
# Merge back to master
git checkout master
git merge --squash merge-from-bootstrap
最佳答案
采用 Pro Git book 中描述的方法:
在 Bootstrap 分支上, merge 上游更改:
$ git checkout bootstrap-upstream
$ git pull
然后,在您的主分支上,子树 merge Bootstrap 子树使用--squash
选项:
$ git checkout master
$ git merge --squash -s subtree --no-commit bootstrap-upstream
这里的关键是使用 subtree
merge 策略,它从 Bootstrap 批发中获取所有更改并将其放在它们的位置(子目录)。
提交并写下你的提交信息:
$ git commit
这将避免在您的 master
分支中包含 bootstrap-upstream
的所有历史记录,并且您不必使用 git rebase
.
关于git - 使用子树 merge 将 Bootstrap merge 到一个 git 仓库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095230/
有人可以告诉我 Bootstrap、Twitter Bootstrap 和 Bootstrap 3 之间有什么区别吗? 最佳答案 在 CSS 框架的上下文中,Bootstrap 和 Twitter B
什么是 Bootstrap 文档中的屏幕阅读器??? >>> bootstrap document 不知道什么是屏幕阅读器? 最佳答案 它是视力不佳或由于某种原因无法从屏幕上阅读的人使用的工具;它会向
我想更新网站上的 Bootstrap,但我不知道安装的版本。 如何仅使用 bootstrap.css 和 bootstrap.min.js 文件来识别 bootstrap 版本? CSS 文件中没有版
很抱歉问了这么一个愚蠢的问题,但我真的不清楚这些。 Bootstrap 是一个非常棒的库,它节省了开发人员的大量工作。 因为它提供了很多功能,比如 节省大量时间。 响应式功能。 一致的设计。 便于使用
我正在使用 ng2-bootstrap对于 Angular 2 项目。 这个包同时支持Bootstrap 3和4,我安装后默认使用Bootstrap 3。我没有找到任何关于切换的信息。 如何从 Boo
我计划在我的项目中使用 Bootstrap 4 和 angular 4,但我对 npm install --save @ng-bootstrap/ng-bootstrap 和 npm install
单击删除按钮后,我设置了警报。 但它的默认高度更大,我想让它更小(高度)。 我试过 display-4 属性(property),但它没有工作。 我已通过 w-50 将宽度设置为屏幕的一半,但警报的一
我使用 Bootstrap 按钮下拉菜单来显示表单。我通过调用 stopPropagation 禁用了单击时消失的下拉菜单(当用户操作表单时) .表单的元素之一是下拉列表。如果我使用 native h
twitter-bootstrap 中的“bootstrap”一词是什么意思?在许多 gem 中都有“bootstrap”这个词。我搜索了其中的含义,但无法得出结论。那么有人可以在这种情况下给出“Bo
由于 Bootstrap 5 不再使用 jQuery 并且正在使用 vanilla JS,我想知道是否仍然建议使用 Bootstrap-Vue,不管 Bootstrap-Vue 还不支持 Bootst
我正在使用 codeigniter 框架,我正在使用 bootstrap typeahead,一切都很好,但我的问题是当我将它放在 bootstrap 模式中时,bootstrap typeahead
我刚刚完成安装 bootstrap 5 版本 ^5.0.0-alpha1并在 app.js 中导入 Bootstrap import "bootstrap" 其他.js var myModal = n
我一直在尝试在使用选项卡的页面上实现 ScrollSpy。 这是我的 body 标签: 这是我的标签 HTML: Home Profile
如果您选择使用 Bootstrap-Xtra,您是否应该也包括原始的 bootstrap.css,或者 bootstrap-xtra.css 应该是一个完整的替代品。 例如,bootstrap-xtr
我正在使用 bootbox 创建一个对话框。 bootbox.dialog({ message: 'Datepicker input: ', title: "Custom label"
我正在将使用 Bootstrap 构建的 Web 应用程序迁移到 React 和 react-bootstrap,两者都很棒。我在 react-bootstrap 中没有看到的一件事是如何顺利集成 B
我正在使用 Bootstrap 3 RC,默认按钮是带有黑色文本的深灰色,而不是带有黑色文本的浅灰色。我已经尝试过 CDN 链接和离线。我还清空了我的浏览器缓存以防万一。有没有其他人经历过这个?这可能
在我的一个项目中,我曾经有 bootstrap-tagsinput http://timschlechter.github.io/bootstrap-tagsinput沿着 bootstrap-2.3
下拉菜单在 Angular-UI-Bootstrap 中不起作用?使用 Bootstrap-3 CSS 以下是代码。链接Click me for a dropdown出现。但不会在点击时切换。怎么了?
如何在 Bootstrap Table 中添加 Bootstrap 按钮 最佳答案 我已经想出了解决办法。我想和大家分享。 这是我的 table : # Visit
我是一名优秀的程序员,十分优秀!