如何在竹子构建过程中只检查git存储库的一部分?

时间:2012-05-04 22:37:56

标签: git bamboo

我有一个需要访问大型git存储库的一小部分的竹构建。为了节省时间和磁盘空间,我想只检查与构建相关的存储库部分。我已经知道浅层结账了。我想做更多的事情并将结账限制在一个文件夹(及其后代)。

我看到这个选项,我认为这是我必须使用的,但我无法让它工作: enter image description here

如何进行我想要的最小结账?

1 个答案:

答案 0 :(得分:2)

最简单的可能是拥有repo标记并提交您想要的特定树的任何人。例如,

上游:

git tag quickie $(git commit-tree $(git rev-parse HEAD:path/to/dir) </dev/null)

在:

git fetch upstream quickie

如果您希望上游存储库自动跟踪分支上的子树,您可以这样做(适当解密的版本):

sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x

比它看起来更简单。试试这个:

mkdir ~/tryitout && cd ~/tryitout && git init foo && git init bar --bare
cat >bar/hooks/post-receive <<'EOF'
sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x
EOF
chmod a+x bar/hooks/post-receive
cd foo
mkdir subtree && touch subtree/oooo && git add . && git commit -am-
git push ../bar master

延迟更新 -

如果您与其他repo共享文件系统,则可以执行以下操作:

git clone --no-checkout /path/to/local/repo/.git subtree
cd subtree
git commit-tree origin/rev:subtree </dev/null | xargs git checkout -B peek

你可以通过改变rev到suit,origin / master:include,origin / next:include,origin / v1.4:somewhereelsenow,无论如何随意弹跳。

我通常有一个“空”分支用于大型回购。 Git确实处理了一个空目录的特例:

git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty
相关问题