关于Grit的一些问题

时间:2011-04-30 02:42:10

标签: ruby git grit

我有一些关于Grit / Git的问题,希望你能帮助我。这是我的代码:

# create Repo
r = Repo.init_bare 'myrepo.git'
i = r.index

# first commit to master
i.add('myfile.txt', 'my file contents')
i.commit("This is my commit")

# second commit to master
i.read_tree("master")
i.add('myfile2.txt', 'my file 2 contents')
i.commit("This is my second commit", [r.commits.first])

# first commit to newbranch
i.read_tree("master")
i.add('myfile3.txt', 'my file 3 contents')
i.commit("This is my third commit", [r.commits.first], nil, nil, 'newbranch')

# second commit to newbranch
i.read_tree("newbranch")
i.add('myfile4.txt', 'my file 4 contents')
i.commit("This is my fourth commit", [r.commit("newbranch")], nil, nil, 'newbranch')

使用此代码我正在尝试创建一个repo,提交两次master,从master创建一个新分支,并向该分支提交两次。但问题是,当我这样做时:

r.commits("newbranch")  # => 3

它说“newbranch”只有3次提交。它在master上省略了第二次提交。这是为什么?我的代码有问题吗?

我最困惑的是如何在分支时指定父提交,以及在“newbranch”上进行第二次提交时。

希望你能提供帮助。感谢

3 个答案:

答案 0 :(得分:3)

API.txt文件说这尚未实现为本机库实现。但是,您仍然可以绕过任何库实现,使用:

r.git.native :checkout, {}, 'my_branch'

查看Grit源代码的git.rb以获取更多详细信息。

答案 1 :(得分:2)

目前,这是我提交给特定分支的解决方案:

index = repo.index
index.read_tree( branch )
index.add( path_to_a_file, file_data )
c = repo.commits( branch ) 
index.commit( comment, repo.commits( branch ), nil, nil, branch )

最后一行允许提交到特定分支而不检查它。此外,除非您不想丢失索引,否则需要调用read_tree函数。

答案 2 :(得分:-1)

只是做:

r.checkout(r.branch( 'newbranch'))

然后进行提交。