[英]Git: How to move contents of gh-pages branch to docs/ directory preserving history?
So github recently implemented a feature to use the docs/
directory of master
instead of gh-pages
. 所以github最近实现了一个功能来使用master
的docs/
目录而不是gh-pages
。 And this is good for some use cases, such as mine. 这对某些用例很有用,例如我的用例。
The scenario is a git repo with a master
and a gh-pages
branch (the "old" way of doing github pages), and I want to move everything in the gh-pages
branch to the docs/
directory in master
(the "new" way of doing github pages). 该场景是一个带有master
和gh-pages
分支的git repo(执行github页面的“旧”方式),我想将gh-pages
分支中的所有内容移动到master
的docs/
目录(“new” “做github页面的方式)。
I'm aware I can use git checkout master; git checkout gh-pages -- docs
我知道我可以使用git checkout master; git checkout gh-pages -- docs
git checkout master; git checkout gh-pages -- docs
, but this will remove history from the gh-pages
files, which is undesired. git checkout master; git checkout gh-pages -- docs
,但这将从gh-pages
文件中删除历史记录,这是不受欢迎的。
I have fiddled around with git subtree
and git filter-branch
, with no success. 我用git subtree
和git filter-branch
,没有成功。
So the question is: Is there a magic one-liner git
command to move the contents of another branch into a subdirectory while keeping history? 所以问题是: 是否有一个神奇的单行git
命令将另一个分支的内容移动到子目录中,同时保留历史记录?
git subtrees
are perfect for this. git subtrees
是完美的。 You mentioned you "fiddled" with them, but did you try: 你提到你“摆弄”他们,但你试过:
git subtree add --prefix=docs origin gh-pages
Check out my docs-subtree
branch 看看我的docs-subtree
分支
I don't know if there is a one-line command, but you could try a rebase, and then merge it into master : 我不知道是否有单行命令,但您可以尝试使用rebase,然后将其合并到master中 :
git checkout gh-pages
git rebase master
git checkout master
git merge --no-ff gh-pages
I didn't find any magic one-liner, but doing a git merge
(thanks @Wikiti for inspiring me towards trying that option once again) seemed to work. 我没有找到任何神奇的单行,但做一个git merge
(感谢@Wikiti鼓励我再次尝试该选项)似乎工作。
The final method I followed is not pretty, and involves running git reset
a number of times. 我遵循的最后一个方法并不漂亮,并涉及多次运行git reset
。
This is not perfect, and I encourage any git experts or gitlab employees to suggest better solutions. 这并不完美,我鼓励任何git专家或gitlab员工提出更好的解决方案。 In the hopes it will help others trying to move away from a gh-pages
branch, this is how I did it: 希望它能帮助其他人试图摆脱gh-pages
分支,这就是我这样做的方式:
git checkout master
git checkout -b master-docs
git merge gh-pages
# Reset the "master" files so that files deleted are left untouched by the merge
git reset src/
git checkout src/
git reset any-other-master-files
git checkout any-other-master-files
# Manually edit any conflicts, e.g. in .gitignore (with your favourite editor)
vi .gitignore
git add .gitignore
vi any-other-conflicting-files
git add any-other-conflicting-files
# Move the "gh-pages" files into "docs/" directory
mkdir docs
git mv *.md docs/
git mv *.html docs/
git mv _posts docs/
git mv _layout docs/
git mv any-other-gh-pages-files docs/
# Check that everything looks OK, there should be only files added to docs/
# If not, go through last steps again
git status
# Confirm the merge
git commit
# Push to origin
git push -u master-docs
# Go to github, make a pull req from master-docs to master for peer review
(The result doesn't look bad ) ( 结果看起来不错 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.