[ English | English (United Kingdom) | 中文 (简体, 中国) | Indonesia | 한국어 (대한민국) | español (México) | Deutsch ]

튜토리얼 : 시리즈에서 변경 사항 개발

이 자습서에서는 동일한 분기의 시리즈에서 여러 변경 세트를 개발하는 간단한 시나리오를 설명합니다. 원하는 경우 sandbox 저장소 을 사용하여 명령을 배치한 그대로 실행하면 됩니다.

만약 여러분이 시각 학습자라면 거의 같은 일을 하는 이 비디오 을 선호할 수도 있습니다(그러나 git-restack 은 제외).

시작해봅시다

마스터 브랜치에서 pulled 을 뽑아서 시작합니다

efried:~/openstack/sandbox$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
efried:~/openstack/sandbox$ git pull --all
<snip>

Blueprint를 작업할 때 Blueprint의 이름을 따서 로컬 분기의 이름을 지정하려고 합니다. 이 예에는 bp/nova-nova-cyborg-interaction 을 사용하겠습니다.

efried:~/openstack/sandbox$ git checkout -b bp/nova-cyborg-interaction
Switched to a new branch 'bp/nova-cyborg-interaction'
efried:~/openstack/sandbox$ git log --oneline -1 --decorate
3d008a3 (HEAD -> bp/nova-cyborg-interaction, origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

git commit (`` –admed`` 없이) git commit 을 할 때, 당신이 시작한 모든 commit에 새로운 commit을 만들어 내고 있는 것입니다. 만약 여러분이 새로 생긴 `` PULL`` 마스터 지점으로 시작한다면, 마스터 지사에서 가장 최근에 합병된 지점이 무엇이었든 간에 그렇게 될 것입니다. 이 예에서 그것은 3d008a3 을 범하는 것입니다.

첫 번째 패치를 편집하여 커밋한다고 가정해 보겠습니다.

efried:~/openstack/sandbox$ echo 'python-cyborgclient>=1.0' >> requirements.txt
efried:~/openstack/sandbox$ echo 'python-cyborgclient==1.1' >> lower-constraints.txt
efried:~/openstack/sandbox$ git add -A
efried:~/openstack/sandbox$ git commit -m "Add cyborg client to requirements"
[bp/nova-cyborg-interaction d76195e] Add cyborg client to requirements
 2 files changed, 2 insertions(+)
 create mode 100644 lower-constraints.txt
efried:~/openstack/sandbox$ git log --oneline -2 --decorate
d76195e (HEAD -> bp/nova-cyborg-interaction) Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

저는 방금 3d008a3 에 덧붙여 d76195e 를 commit 했습니다. 제 지점 이름(`` bp/nova-cyborg-interaction`` )이 저와 함께 온 것을 보실 수 있을 겁니다.

이제 저는 또 다른 변화를 만들려고 합니다. 하지만 그 중 일부분만, 현재 진행 중인 작업 중 하나가 다음과 같이 약속합니다.

efried:~/openstack/sandbox$ mkdir -p nova/pci/cyborg
efried:~/openstack/sandbox$ touch nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git add nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git commit -m "WIP: Cyborg PCI handling"
[bp/nova-cyborg-interaction f17f040] WIP: Cyborg PCI handling
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git log --oneline -3 --decorate
f17f040 (HEAD -> bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

이제 f17f040d76195e 위에 있으며, 3d008a3 (마스터 라고 불립니다. 제 지점 이름이 다시 저와 함께 왔음을 참고하세요.

이 시점에서, 저는 제 시리즈를 게릿트까지 밀어올립니다. 두 개의 커밋을 한 번에 푸시하고 싶은지 확인하게 됩니다.

efried:~/openstack/sandbox$ git review
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, or if you are submitting multiple self-contained but
dependent changes. Otherwise you should consider squashing your
changes into one commit before submitting (for indivisible changes) or
submitting from separate branches (for independent changes).

The outstanding commits are:

f17f040 (HEAD -> bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements

Do you really want to submit the above commits?
Type 'yes' to confirm, other to cancel: yes
remote:
remote: Processing changes: new: 2, refs: 2
remote: Processing changes: new: 2, refs: 2
remote: Processing changes: new: 2, refs: 2, done
remote:
remote: New Changes:
remote:   https://review.opendev.org/635341 Add cyborg client to requirements
remote:   https://review.opendev.org/635342 WIP: Cyborg PCI handling
remote:
To ssh://review.opendev.org:29418/opendev/sandbox.git
 * [new branch]      HEAD -> refs/for/master%topic=bp/nova-cyborg-interaction

이제 https://review.opendev.org/#/c/635342/와 같은 링크 중 하나로 이동하면 오른쪽 상단에 패치가 직렬로 쌓여 있는 것을 볼 수 있습니다.

하지만 이런, 제가 첫 번째 약속에서 실수를 했군요. 나의 낮은 제약조건은 요구사항 에서 최소치 이상일 수 없습니다.txt. “만약 제가 아직 현지에 지사를 두고 있다면 다음 단계를 건너뛸 수도 있지만, 흔한 낙상을 피하기 위해 엄중한 문제로서 저는 git-review 를 요청하여 상위 의 변화를 이끌어 내겠습니다.

efried:~/openstack/sandbox$ git review -d 635342
Downloading refs/changes/42/635342/1 from gerrit
Switched to branch "review/eric_fried/bp/nova-cyborg-interaction"

이제 저는 최고의 변화에 앉아 있습니다. (이것은 제가 그것을 추진하기 전과 정확히 같다는 것을 알게 될 것입니다. 다시 말하지만, 제가 기술적으로 제가 있던 곳에서 일할 수 있었다는 것을 의미하지만, 위 내용을 보십시오.)

efried:~/openstack/sandbox$ git log --oneline -3 --decorate
f17f040 (HEAD -> review/eric_fried/bp/nova-cyborg-interaction, bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

그러나 저는 d76195e 를 편집하고 그 위에 f17f040 을 적절히 쌓아두고 싶습니다. 여기서는 git-restack 이라는 도구를 사용합니다(pip install  git-restack 을 실행하십시오.)

efried:~/openstack/sandbox$ git restack

이렇게 하면 편집기에서 제가 있는 곳과 메인 지점 사이의 모든 커밋을 보여 줍니다(지금은 그 커밋이 상위 순서가 됩니다).

pick d76195e Add cyborg client to requirements
pick f17f040 WIP: Cyborg PCI handling
<snip>

첫 번째 것을 고치고 싶어서 pickedit 으로 바꿉니다.

edit d76195e Add cyborg client to requirements
pick f17f040 WIP: Cyborg PCI handling
<snip>

편집기를 저장한 후 종료하면 다음이 나타납니다.

Stopped at d76195e...  Add cyborg client to requirements
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

저는 하위 기질 을 고칩니다. txtrights는 다음과 같습니다.

efried:~/openstack/sandbox$ sed -i 's/cyborgclient==1.1/cyborgclient==1.0/' lower-constraints.txt

…및 현재 커밋을 수정(amend) 합니다.

efried:~/openstack/sandbox$ git commit -a --amend --no-edit
[detached HEAD df226f7] Add cyborg client to requirements
 Date: Wed Feb 6 16:15:30 2019 -0600
 2 files changed, 2 insertions(+)
 create mode 100644 lower-constraints.txt

…그리고 git-restack 에게 진행하라고 말합니다.

efried:~/openstack/sandbox$ git rebase --continue
Successfully rebased and updated refs/heads/review/eric_fried/bp/nova-cyborg-interaction.

만약 제가 더 큰 시리즈를 가지고 있고, 제가 pickedit 으로 바꿔서 한 번 이상의 약속을 했다면, 저는 지금 편집해야 할 다음 편에 앉아 있을 것입니다. 지금 상태로는, 그것만이 제가 할 수 있는 유일한 일이었기 때문에, 저는 일을 끝내고 다시 제 시리즈의 맨 위에 앉았습니다.

efried:~/openstack/sandbox$ git log --oneline -3 --decorate
e937eef (HEAD -> review/eric_fried/bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
df226f7 Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

커밋 해시는 both 커밋에 대해 변경되었습니다(마스터 에는 변경되지 않음). 윗부분이 바뀐 것은 중간부분의 새로운 버전에 기초했기 때문입니다.

이제 영상 시리즈를 게리트로 되돌리면 동일한 확인 프롬프트가 표시되고 두 변경 사항 모두 새로운 패치 세트가 표시됩니다. 게리트로 맨 위 패치를 보시면 패치 세트 2가 리베이스로 나타납니다.