如何将未跟踪目录的内容合并到其他分支的根目录

时间:2014-01-28 09:53:39

标签: git github merge github-pages

对于我的GitHub页面,我使用静态站点生成器。该站点的源代码位于<source>分支中,它在_site目录中生成html文件。
<master>分支用于显示实际网站,并应包含根级别生成的html文件。

由于我不希望_site目录及其内容成为我的<source>分支的一部分,因此我忽略了_site目录(将_site放入我的.gitignore)。

现在我的问题是如何将_site分支的<source>目录的未跟踪内容合并到<master>分支的根目录?

更新
主要的问题似乎是Git需要你想要合并的任何东西被跟踪(理所当然;)),但我不想跟踪<source>分支中生成的文件。
我可以提出的唯一解决方法是使用至少一个可以在之后删除的临时分支。使用git子树从临时分支拆分到另一个临时分支似乎是最干净的选择。

有更好/更清洁的方法吗?

这就是我提出的:

# Checkout branch <temp1> carrying over the current working
# directory including ignored/untracked files
git checkout -b temp1

# Add _site to staging ignoring .gitignore and commit
git add -f _site/
git commit -m "irrelevant commitmessage"

# Subtree split _site to <temp2> branch (root of branch)
git subtree --prefix=_site/ split -b temp2

# Checkout master and merge <temp2>
git checkout master
git merge --squash temp2
git commit -m "commitmessage"

# Remove <temp1> and <temp2> branches and push

1 个答案:

答案 0 :(得分:0)

如果对这个问题有更好的解决方案,我会欢迎他们,但鉴于你想要进行一种合并,这实际上不是一个,我只能建议你创建一个post-commit脚本或bash /执行以下操作的perl / python脚本:

  1. 如果没有“来源”分支(可能是任何条件)退出
  2. 创建另一个分支,如temp001
  3. 在该分支上复制所有内容
  4. 从_site复制到root
  5. checkout master merge temp001
  6. 退出(我的建议)
  7. 现在确认您的更改并提交/推送。您可以在最后一步执行此操作,但在第一次尝试运行时我不会这样做。

    这是我能提出的最佳建议。

相关问题