Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Don't commit if this would be an empty commit #1162

Answered by Byron
mhajder asked this question in Q&A
Discussion options

Hi,
I have no idea how to write a functions without committing and sending code, if there are no changes and it's an empty commit.

from git import Repo, Actor
repo = Repo(full_path)
assert not repo.bare
origin = repo.remote('origin')
assert origin.exists()
assert origin == repo.remotes.origin == repo.remotes['origin']
origin.pull()
repo.git.add(f'{full_path}/file_list.txt')
repo.git.add(f'{full_path}/files/')
repo.index.commit(f'Time now: {time_now}')
origin.push()

Currently, after running such code, a commit is created with no changes to the files. I can't find any function that checks for any changes before commit after adding files. I don't mean changes to all code and to all files in the main .git folder, but changes to one file and one folder with many files.

I am also looking for a solution other than using untracked_files in a loop looking to see if my needed files are there.

You must be logged in to vote

A commit has a link to a tree, which identifies the state of all files contained with it.
Thus, if the tree hash does not change between commits, they refer to the same state.
I believe one can get a handle on a tree with commit.tree.

Even though I am closing the issue, please feel free to keep posting here for any follow ups.

Replies: 2 comments

Comment options

A commit has a link to a tree, which identifies the state of all files contained with it.
Thus, if the tree hash does not change between commits, they refer to the same state.
I believe one can get a handle on a tree with commit.tree.

Even though I am closing the issue, please feel free to keep posting here for any follow ups.

You must be logged in to vote
0 replies
Answer selected by mhajder
Comment options

Thanks for the answer. I was able to find such a solution. I don't know if it's completely correct but it's important that it works.

from git import Repo, Actor
repo = Repo(full_path)
assert not repo.bare
origin = repo.remote('origin')
assert origin.exists()
assert origin == repo.remotes.origin == repo.remotes['origin']
origin.pull()
repo.git.add(f'{full_path}/file_list.txt')
repo.git.add(f'{full_path}/files/')
if len(repo.index.diff('HEAD')) > 0:
 repo.index.commit(f'Time now: {time_now}')
 origin.push()
You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants
Converted from issue

This discussion was converted from issue #1056 on February 26, 2021 11:18.

AltStyle によって変換されたページ (->オリジナル) /