我有一个git存储库:
存储库A:
config
view1.yml
view2.yml
public
css/
styles.css
js/
scripts.js
index.html
我想添加另一个远程存储库,但只是跟踪公用文件夹的内容,例如:
存储库B:
css/
styles.css
js/
scripts.js
index.html
我怎么能在当地做到这一点?与git remote add
?
答案 0 :(得分:1)
如果所有内容都在您要导出的目录下,并且您确实要省略其他所有内容,则可以使用git filter-branch过滤掉分支,然后将该结果分支推送到Repo B。
从您感兴趣的分支机构的一角,假设您想要保持对“公共”及以下目录的更改:
git checkout -b nameOfPublicBranch
// Create a new branch where you want to start to filter
git filter-branch -f --subdirectory-filter public
// This filters your branch down to commits that modified public (and below)
git push repoB nameOfPublicBranch
// now export to repoB just this stuff that you wanted on your branch nameOfPublicBranch
git checkout <yourOldBranchName>
// get back to your old branch
如果你想在分支nameOfPublicBranch上将提交压缩成一个,那么在你推送它之前在它上面做一个rebase squash。
可能有很多其他方法可以解决这个问题,其中一种可能是使用子模块,这种方法可能会出现意外问题(重写历史记录)。
答案 1 :(得分:1)
看看git subtree。从他们的文档中解释了以下内容:
...子树允许子项目包含在子目录中 主项目,可选择包括子项目的整个项目 历史。
例如,您可以将库的源代码包含为 你的申请的子目录......
我会在某处创建新的裸存储库(git init --bare
)并执行子树split
命令以“分支”公用文件夹的历史记录。然后我会将此信息推送到您的其他存储库。此示例可以在上面链接的文档中看作Example 3。
<go to the new location>
git init --bare
git subtree split --prefix=lib --annotate="(split)" -b split
git push <new-repo> split:master
答案 2 :(得分:0)
也许您应该使用gitignore(告诉git忽略文件并且不跟踪它们),并使用以下内容(未经过测试):
*
!/css
!/js
如果您已经跟踪了文件,则需要在设置gitignore之前运行git rm --cached <file>
。
如果您想了解更多关于gitignore的信息,也许您想阅读git tutorial的this part。