我遇到的问题是这样的:
我有一个 git 存储库,我通过 Pycharm 的 git 插件在本地提交(不确定这部分是否相关)。我将这些更改推送到 gitlab 存储库。
现在,我必须进行代码审查。有人给我发了一个 .gitreview 文件的 git 存储库。他们告诉我克隆存储库,复制/粘贴我的本地文件,然后按照以下步骤操作:
git clone http://repo-address/wow.git
cd wow
git review -s
git checkout -b fix_something
# ソース
tox -e py27 -e pep8 # for testing
git add # the files
gitt commit -m "コメント"
git review
我这样做了,我可以看到我的文件上传到 gerrit。对我的文件进行了一些代码审查,每当我想上传修订或更改时,我都必须执行以下流程:
git review -d "the ID of the patch set you want to edit"
# Edit the source
tox -e py27 -e pep8 # Test command
git add files you want
git commit --amend
git review
我很确定我至少做了一次正确的事情,但这就是事情变得有点模糊的地方(因此我需要帮助)。我确实确实编辑了一个补丁集并至少对其进行了一次正确修改(我可以在 gerrit 上看到它,当我 git diff 它与以前的提交相比时,更改就在那里)。
但是,在这里我尝试再次执行此操作,但它无法正常工作,可能是因为我一直在对本地存储库进行更改,而不是我克隆的包含 .gitreview 文件的存储库。我一直在尝试做的事情(并且可能是错误的)
- 更改本地仓库
- 将本地仓库中的所有文件复制到包含 .gitreview 文件的仓库中
- 用 git review -d 执行上述步骤
正在发生的事情是:
error: unable to unlink old 'repo/__init__.py': Permission denied
...
几乎每个文件。我认为这是因为复制我的本地内容并硬覆盖所有内容都很糟糕。一位同事告诉我参考这个(在日语中很抱歉: http: //qiita.com/uasi/items/77d41698630fef012f82)这基本上是关于如何将两个存储库合并或合并为一个的指南(也保留提交历史) . 我这样做了:
cd ~/gerrit-repo
git remote add hotfix ~/local-repo # i assum the "hotfix" is just a name reference so i may have messed up here too
git fetch hotfix
git merge hotfix/master
它“有效”,因为它复制并合并了所有内容,而我所要做的就是解决 .gitignore 文件中的冲突。我现在可以做 git review,一切都应该没问题。问题是,当我执行 gitreview 时,发生了以下情况:
You are about to submit multiple commits. This is expected if you are
submitting a commit that is dependent on one or more in-review
commits. Otherwise you should consider squashing your changes into one
commit before submitting.
The outstanding commits are:
0994069 (HEAD -> review/me/intit-test) Newest patch merge preparation (hopefully I didn't mess everything up)
b49d7b4 checking whether the patch set stuff actually worked。
8b3685b (hotfix-patch/master) patch-13-prep
afdd1ca minor edits to log config
5425ac7 reorganization re: patch set 12 code-review-1
de57a63 reorganization re: patch set 12 code-review-1
30133bf appended yuck func to xyz file
f7760b9 init xyz file
e48aa60 added log folder to ignore
cdbbdf5 init setup.py
76d0e9d created folders for the different configs needed for different servers. I don't know if these should all be accessible from one directory though.
1599648 added command list for the checks
...
我注意到自我最初提交以来的每一次提交都在那里。这是一个问题,因为我只想附加自上次 git review / patch-set 以来发生的本地目录中的提交。无论如何,继续不管然后:
remote: Resolving deltas: 100% (414/414)
remote: Processing changes: refs: 1, done
remote:
remote: ERROR: In commit 28064f... # (this actually is the first commit in my local repo)
remote: ERROR: committer email address aaa@google.com
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: bbb@google.com
remote: ERROR:
remote: ERROR: To register an email address, please visit:
remote: ERROR: http://gerrit-link/#/settings/contact
remote:
remote:
To ssh://gerrit-link:port/repo/project.git
! [remote rejected] HEAD -> refs/publish/master/intit-test (invalid committer)
error: failed to push some refs
这对我来说很有意义,但不受欢迎,因为本地提交是从我的本地机器完成的(并且有问题的冲突提交实际上是我对 repo 的第一次提交)。我不确定是否必须解决初始提交时的电子邮件差异,然后才能进行审查,或者我是否还必须修复提交历史记录。我认为我应该只从上一个补丁集开始提交,我错了吗?如果是这样,我如何只附加自 gerrit 补丁集中提交以来的提交?
简而言之,假设我有一个我推送并正在管理的回购。我想将所有这些文件复制到另一个标题下的另一个仓库/你有什么。我有,现在它是最新的。所以我想继续只在这个新的 repo 上工作。但我不小心继续在原来的本地工作。如何将本地提交的提交附加到新的提交?