在帮助朋友解决git问题的同时,我不得不介绍一个需要与分支完全分离的master
分支.这个分支的内容确实与master
分支上开发的内容有不同的起源,但它们将master
在以后合并到分支中.
我记得从底层向上阅读John Wiegley的Git,分支本质上是一个遵循某个约定的提交的标签,以及如何将提交绑定到文件树,并且可选地绑定到父提交.我们使用git的管道创建了对现有存储库的无父提交:
所以我们摆脱了索引中的所有文件......
$ git rm -rf .
Run Code Online (Sandbox Code Playgroud)
...从tarball中提取目录和文件,将其添加到索引中...
$ git add .
Run Code Online (Sandbox Code Playgroud)
...并创建了一个树对象......
$ git write-tree
Run Code Online (Sandbox Code Playgroud)
(git-write-tree
告诉我们创建的树对象的sha1sum.)
然后,我们提交了树,没有指定父提交......
$ echo "Imported project foo" | git commit-tree $TREE
Run Code Online (Sandbox Code Playgroud)
(git-commit-tree
告诉我们创建的提交对象的sha1sum.)
...并创建了一个指向新创建的提交的新分支.
$ git update-ref refs/heads/other-branch $COMMIT
Run Code Online (Sandbox Code Playgroud)
最后,我们回到master
分公司继续在那里工作.
$ git checkout -f master
Run Code Online (Sandbox Code Playgroud)
这似乎按计划进行.但这显然不是我推荐给刚刚开始使用git的人的一种程序,温和地说.有没有更简单的方法来创建一个与目前存储库中发生的所有内容完全无关的新分支?
我想在每次git推送之前运行一个单元测试,如果测试失败,取消推送,但我甚至找不到预推钩,只有pre-commit和pre-rebase.
如果我在repo/.git/hooks/post-commit中的本地存储库中创建一个新的钩子脚本然后运行"git push"钩子被推送到远程?然后,当其他开发人员从同一个来源运行"git pull"时,他们会得到我的新钩子吗?
我正在研究大规模使用git.我希望通过调用master分支trunk增加采用率并使事情变得更容易.
这可以并且将为SVN用户带来一些舒适感.我知道我可以创建一个名为trunk的分支,但这似乎偏离了git规范,可能会让一些用户感到困惑.
我知道我也可以创建和删除标签到我的心脏的内容,但当我检查这些标签时,它告诉我它是一个非本地分支,这对我很好,但可能不是我想要做的.
我是一个完全git newb但是在发布和构建系统方面经验丰富的专业人士.
我想要做的是能够呼叫主干线. 我已经看到了别名命令的能力,这是否也适用于版本化对象的名称?
我知道git-svn存在和其他工具,但分层存储库系统的开销吓坏了我.
我在“程序文件”目录中安装了一个 git,我没有修改它的权限(只能读取)。但我想放一些新的钩子。有没有办法在命令行中调用git并为 hooks 目录指定新路径?