У меня проблема в следующем:
У меня есть репозиторий git, который я фиксировал локально с помощью плагина Pycharm git (не уверен, что эта его часть актуальна). Я отправил эти изменения в репозиторий gitlab.
Теперь мне нужно сделать код-ревью. Кто-то присылает мне репозиторий git с файлом .gitreview. Они сказали мне клонировать репозиторий, скопировать/вставить мои локальные файлы и выполнить следующие шаги:
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, и все должно быть в порядке. Проблема в том, что когда я сделал 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. Во всяком случае, продолжил, несмотря ни на что, а затем:
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 [email protected]
remote: ERROR: does not match your user account.
remote: ERROR:
remote: ERROR: The following addresses are currently registered:
remote: ERROR: [email protected]
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
Что для меня имеет смысл, но нежелательно, поскольку локальные коммиты были сделаны с моей локальной машины (а конфликтующая фиксация, о которой идет речь, на самом деле является моей первой фиксацией для репо). Я не уверен, должен ли я разрешить разницу в электронной почте при первоначальном коммите, а затем смогу просмотреть, или мне также нужно исправить историю коммитов. Я ошибаюсь, думая, что я должен делать коммиты только после установки последнего патча? Если да, то как добавить коммиты только после коммита в наборе исправлений gerrit?
Короче говоря, скажем, что у меня есть репозиторий, на который я нажал и которым я управляю. Я хочу скопировать все эти файлы в другое хранилище под другим названием/что у вас есть. Я знаю, и теперь это актуально. Поэтому я хочу продолжить работу только над этим новым репо. Но я случайно продолжал работать над оригинальным местным. Как добавить коммиты из моего локального в новый?