Несколько вопросов о Грит

У меня есть несколько вопросов о 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')

С помощью этого кода я пытаюсь создать репо, дважды зафиксировать мастер, создать новую ветку от мастера и дважды зафиксировать эту ветку. Но проблема в том, что когда я делаю это:

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

Это говорит о том, что на "newbranch" есть только 3 коммита. Это оставляет второй коммит на мастере. Это почему? Что-то не так с моим кодом?

Больше всего меня смущает то, как указать родительский коммит при разветвлении и при создании второго коммита на "newbranch".

Надеюсь, вы можете помочь. Спасибо

3 ответа

Решение

На данный момент это мое решение, связанное с определенной веткой:

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, если вы не хотите потерять свой индекс.

Файл API.txt говорит, что это еще не реализовано как реализация нативной библиотеки. Однако вы все равно можете сделать это, минуя любую реализацию библиотеки, с помощью:

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

Посмотрите в git.rb источника Grit для получения более подробной информации.

Просто делать:

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

и затем сделайте ваши коммиты.

Другие вопросы по тегам