4

Git に手動でプッシュされるソース コードを現在作成している変更プロセスを自動化しようとしています。GitPythonを使用してそのコードをラップしようとしています:

from git import *

# create the local repo
repo = Repo.init("/tmp/test/repo", bare=True)
assert repo.bare == True

# check status of active branch
repo.is_dirty()

# clone the remote repo
remote_repo = repo.clone("http://user:pass@git/repo.git")

# compile source code into repository
# ... 

# track untracked files
repo.untracked_files

# commit changes locally
repo.commit("commit changes")

# push changes to master
remote_repo.push()

これを実行しようとすると、

トレースバック (最新の呼び出しが最後):

ファイル「git_test2.py」の 33 行目

repo.commit("変更をコミット")

悪いオブジェクト: 636f6d6d6974206368616e676573

スクリプトはリモート リポジトリをプルできますが、コミットに失敗します。これに対するより良いアプローチはありますか?

4

2 に答える 2

1

ベア リポジトリに対してコミットすることはできません。押したり引いたりすることしかできません。並行して、これをローカルで行う方法について考えてみてください。ベアレポのクローンを作成してアクションを実行してみてください。動作しません。

私は pythonic git バインディングに精通していませんが、作業リポジトリのクローンを作成し、必要に応じて master の代わりに特定のブランチをチェックアウトし、作業を行い、その内容に対して git add を呼び出してからコミットする必要があると想像します。

また、 repo.untracked_files は単にそれらをリストする no op であり、追加しません。

正直なところ、 https: //pythonhosted.org/GitPython/0.3.1/tutorial.html から盲目的にコピーして貼り付けたように見えます。

たとえば、インデックスオブジェクトを操作する必要があります

index = repo.index
for ( path, stage ), entry in index.entries.iteritems: pass
index.add(['SOMEFILE'])
new_commit = index.commit("YOUR COMMIT MESSAGE")
#do somethign with new commit    

私が見つけた別の例

import git
repo = git.Repo( '/home/me/repodir' )
print repo.git.status()
# checkout and track a remote branch
print repo.git.checkout( 'origin/somebranch', b='somebranch' )
# add a file
print repo.git.add( 'somefile' )
# commit
print repo.git.commit( m='my commit message' )
# now we are one commit ahead
print repo.git.status()
# now push
于 2014-03-26T19:14:23.747 に答える