Spaces:
Paused
Paused
<!--- | |
Copyright 2020 The HuggingFace Team. All rights reserved. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
--> | |
# ๐ค Transformers์ ๊ธฐ์ฌํ๊ธฐ [[contribute-to-transformers]] | |
๋๊ตฌ๋ ๐ค Transformers์ ๊ธฐ์ฌํ ์ ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฌ๋์ ๊ธฐ์ฌ๋ฅผ ์์คํ ์๊ฐํฉ๋๋ค. ์ฝ๋ ๊ธฐ์ฌ๋ ์ปค๋ฎค๋ํฐ๋ฅผ ๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด ์๋๋๋ค. ์ง๋ฌธ์ ๋ตํ๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ ๋์ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๊ฒ๋ ๋งค์ฐ ๊ฐ์น๊ฐ ์์ต๋๋ค. | |
๐ค Transformers๋ฅผ ๋๋ฆฌ ์๋ฆฌ๋ ๊ฒ๋ ํฐ ๋์์ด ๋ฉ๋๋ค! ๋ฉ์ง ํ๋ก์ ํธ๋ค์ ๊ฐ๋ฅํ๊ฒ ํ ๐ค Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ธ๋ก๊ทธ ๊ฒ์๊ธ์ ์ธ๊ธํ๊ฑฐ๋, ๋์์ด ๋์์ ๋๋ง๋ค Twitter์ ์๋ฆฌ๊ฑฐ๋, ์ ์ฅ์์ โญ๏ธ ๋ฅผ ํ์ํ์ฌ ๊ฐ์ฌ ์ธ์ฌ๋ฅผ ์ ํด์ฃผ์ธ์. | |
์ด๋ค ๋ฐฉ์์ผ๋ก ๊ธฐ์ฌํ๋ [ํ๋ ๊ท์น](https://github.com/huggingface/transformers/blob/main/CODE_OF_CONDUCT.md)์ ์์งํ๊ณ ์กด์คํด์ฃผ์ธ์. | |
**์ด ์๋ด์๋ ๋ฉ์ง [scikit-learn ๊ธฐ์ฌ ์๋ด์](https://github.com/scikit-learn/scikit-learn/blob/main/CONTRIBUTING.md)์์ ํฐ ์๊ฐ์ ๋ฐ์์ต๋๋ค.** | |
## ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ [[ways-to-contribute]] | |
์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๐ค Transformers์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค: | |
* ๊ธฐ์กด ์ฝ๋์ ๋ฏธํด๊ฒฐ๋ ๋ฌธ์ ๋ฅผ ์์ ํฉ๋๋ค. | |
* ๋ฒ๊ทธ ๋๋ ์๋ก ์ถ๊ฐ๋๊ธธ ์ํ๋ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ์ด์๋ฅผ ์ ์ถํฉ๋๋ค. | |
* ์๋ก์ด ๋ชจ๋ธ์ ๊ตฌํํฉ๋๋ค. | |
* ์์ ๋ ๋ฌธ์์ ๊ธฐ์ฌํฉ๋๋ค. | |
์ด๋์๋ถํฐ ์์ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด, [Good First Issue](https://github.com/huggingface/transformers/contribute) ๋ชฉ๋ก์ ํ์ธํด๋ณด์ธ์. ์ด ๋ชฉ๋ก์ ์ด๋ณด์๋ ์ฐธ์ฌํ๊ธฐ ์ฌ์ด ์คํ ์ด์ ๋ชฉ๋ก์ ์ ๊ณตํ๋ฉฐ, ๋น์ ์ด ์คํ์์ค์ ์ฒ์์ผ๋ก ๊ธฐ์ฌํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ์ ์์ ํ๊ณ ์ถ์ ์ด์์ ๋๊ธ๋ง ๋ฌ์์ฃผ๋ฉด ๋ฉ๋๋ค. | |
์กฐ๊ธ ๋ ๋์ ์ ์ธ ์์ ์ ์ํ๋ค๋ฉด, [Good Second Issue](https://github.com/huggingface/transformers/labels/Good%20Second%20Issue) ๋ชฉ๋ก๋ ํ์ธํด๋ณด์ธ์. ์ด๋ฏธ ๋น์ ์ด ์ ํ๊ณ ์๋ค๊ณ ์๊ฐ๋๋๋ผ๋, ํ ๋ฒ ์๋ํด๋ณด์ธ์! ์ฐ๋ฆฌ๋ ์ฌ๋ฌ๋ถ์ ๋์ธ ๊ฒ์ ๋๋ค. ๐ | |
> ์ปค๋ฎค๋ํฐ์ ์ด๋ฃจ์ด์ง๋ ๋ชจ๋ ๊ธฐ์ฌ๋ ๋๊ฐ์ด ์์คํฉ๋๋ค. ๐ฅฐ | |
## ๋ฏธํด๊ฒฐ๋ ๋ฌธ์ ์์ ํ๊ธฐ [[fixing-outstanding-issues]] | |
๊ธฐ์กด ์ฝ๋์์ ๋ฐ๊ฒฌํ ๋ฌธ์ ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ๋ ์ค๋ฅธ ๊ฒฝ์ฐ, ์ธ์ ๋ ์ง [๊ธฐ์ฌ๋ฅผ ์์](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md/#create-a-pull-request)ํ๊ณ Pull Request๋ฅผ ์์ฑํด์ฃผ์ธ์! | |
## ๋ฒ๊ทธ ๊ด๋ จ ์ด์๋ฅผ ์ ๊ธฐํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ ์์ฒญํ๊ธฐ [[submitting-a-bugrelated-issue-or-feature-request]] | |
๋ฒ๊ทธ ๊ด๋ จ ์ด์๋ฅผ ์ ๊ธฐํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์์ฒญํ ๋๋ ๋ค์ ๊ฐ์ด๋๋ผ์ธ์ ์ต๋ํ ์ค์ํด์ฃผ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ข์ ํผ๋๋ฐฑ๊ณผ ํจ๊ป ๋น ๋ฅด๊ฒ ๋ต๋ณํด ๋๋ฆด ์ ์์ต๋๋ค. | |
### ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ จ๋์? [[did-you-find-a-bug]] | |
๐ค Transformers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ ์ค์ ๊ฒช๋ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํด์ฃผ๋ ์ฌ์ฉ์๋ค ๋๋ถ์ ๋์ฑ ๊ฒฌ๊ณ ํด์ง๊ณ ์ ๋ขฐํ ์ ์๊ฒ ๋์์ต๋๋ค. | |
์ด์๋ฅผ ๋ณด๊ณ ํ๊ธฐ ์ ์, ๋ฒ๊ทธ๊ฐ ์ด๋ฏธ **๋ณด๊ณ ๋์ง ์์๋์ง** ํ์ธํด์ฃผ์ธ์. (GitHub์ ์ด์ ํญ ์๋์ ๊ฒ์ ๋ฐ๋ฅผ ์ฌ์ฉํ์ธ์). ์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์์ ๋ฐ์ํ ๋ฒ๊ทธ์ด์ผ ํ๋ฉฐ, ์ฝ๋์ ๋ค๋ฅธ ๋ถ๋ถ๊ณผ ๊ด๋ จ๋ ๊ฒ์ด ์๋์ด์ผ ํฉ๋๋ค. ๋ฒ๊ทธ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ๋ก ๋ฐ์ํ์๋์ง ํ์คํ์ง ์์ ๊ฒฝ์ฐ ๋จผ์ [ํฌ๋ผ](https://discuss.huggingface.co/)์์ ์ง๋ฌธํด ์ฃผ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ์ ์ธ ์ง๋ฌธ๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. | |
๋ฒ๊ทธ๊ฐ ์ด๋ฏธ ๋ณด๊ณ ๋์ง ์์๋ค๋ ๊ฒ์ ํ์ธํ๋ค๋ฉด, ๋ค์ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ์ด์๋ฅผ ์ ์ถํด ์ฃผ์ธ์. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค: | |
* ์ฌ์ฉ ์ค์ธ **์ด์์ฒด์ ์ข ๋ฅ์ ๋ฒ์ **, ๊ทธ๋ฆฌ๊ณ **Python**, **PyTorch** ๋๋ **TensorFlow** ๋ฒ์ . | |
* ๋ฒ๊ทธ๋ฅผ 30์ด ์ด๋ด๋ก ์ฌํํ ์ ์๋ ๊ฐ๋จํ๊ณ ๋ ๋ฆฝ์ ์ธ ์ฝ๋ ์ค๋ํซ. | |
* ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ *์ ์ฒด* ํธ๋ ์ด์ค๋ฐฑ. | |
* ์คํฌ๋ฆฐ์ท๊ณผ ๊ฐ์ด ๋์์ด ๋ ๊ฒ์ผ๋ก ์๊ฐ๋๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ฒจ๋ถํด ์ฃผ์ธ์. | |
์ด์์ฒด์ ์ ์ํํธ์จ์ด ๋ฒ์ ์ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์: | |
```bash | |
transformers-cli env | |
``` | |
์ ์ฅ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์์๋ ๊ฐ์ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค: | |
```bash | |
python src/transformers/commands/transformers_cli.py env | |
``` | |
### ์๋ก์ด ๊ธฐ๋ฅ์ ์ํ์๋์? [[do-you-want-a-new-feature]] | |
๐ค Transformers์์ ์ฌ์ฉํ๊ณ ์ถ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์๋ค๋ฉด, ๋ค์ ๋ด์ฉ์ ํฌํจํ์ฌ ์ด์๋ฅผ ์ ์ถํด ์ฃผ์ธ์: | |
1. ์ด ๊ธฐ๋ฅ์ด ํ์ํ *์ด์ *๋ ๋ฌด์์ธ๊ฐ์? ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฌธ์ ๋ ๋ถ๋ง๊ณผ ๊ด๋ จ์ด ์๋์? ํ๋ก์ ํธ์ ํ์ํ ๊ธฐ๋ฅ์ธ๊ฐ์? ์ปค๋ฎค๋ํฐ์ ๋์์ด ๋ ๋งํ ๊ธฐ๋ฅ์ธ๊ฐ์? | |
์ด๋ค ๋ด์ฉ์ด๋ ์ฌ๋ฌ๋ถ์ ์ด์ผ๊ธฐ๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค! | |
2. ์์ฒญํ๋ ๊ธฐ๋ฅ์ ์ต๋ํ ์์ธํ ์ค๋ช ํด ์ฃผ์ธ์. ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์๋ก ๋ ๋์ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. | |
3. ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ *์ฝ๋ ์ค๋ํซ*์ ์ ๊ณตํด ์ฃผ์ธ์. | |
4. ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ๋ ผ๋ฌธ์ด ์๋ ๊ฒฝ์ฐ ๋งํฌ๋ฅผ ํฌํจํด ์ฃผ์ธ์. | |
์ด์๊ฐ ์ ์์ฑ๋์๋ค๋ฉด ์ด์๊ฐ ์์ฑ๋ ์๊ฐ, ์ด๋ฏธ 80% ์ ๋์ ์์ ์ด ์๋ฃ๋ ๊ฒ์ ๋๋ค. | |
์ด์๋ฅผ ์ ๊ธฐํ๋ ๋ฐ ๋์์ด ๋ ๋งํ [ํ ํ๋ฆฟ](https://github.com/huggingface/transformers/tree/main/templates)๋ ์ค๋น๋์ด ์์ต๋๋ค. | |
## ์๋ก์ด ๋ชจ๋ธ์ ๊ตฌํํ๊ณ ์ถ์ผ์ ๊ฐ์? [[do-you-want-to-implement-a-new-model]] | |
์๋ก์ด ๋ชจ๋ธ์ ๊ณ์ํด์ ์ถ์๋ฉ๋๋ค. ๋ง์ฝ ์ฌ๋ฌ๋ถ์ด ์๋ก์ด ๋ชจ๋ธ์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ธ์. | |
* ๋ชจ๋ธ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ๊ณผ ๋ ผ๋ฌธ ๋งํฌ. | |
* ๊ตฌํ์ด ๊ณต๊ฐ๋์ด ์๋ค๋ฉด ๊ตฌํ ๋งํฌ. | |
* ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ฉด ๊ฐ์ค์น ๋งํฌ. | |
๋ง์ฝ ๋ชจ๋ธ์ ์ง์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด, ์๋ ค์ฃผ์ธ์. ๐ค Transformers์ ์ถ๊ฐํ ์ ์๋๋ก ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค! | |
์๋ก์ด ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ [์์ธ ์๋ด์์ ํ ํ๋ฆฟ](https://github.com/huggingface/transformers/tree/main/templates)์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, [๐ค Transformers์ ์๋ก์ด ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ](https://huggingface.co/docs/transformers/add_new_model)์ ๋ํ ๊ธฐ์ ์ ์ธ ์๋ด์๋ ์์ต๋๋ค. | |
## ๋ฌธ์๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ผ์ ๊ฐ์? [[do-you-want-to-add-documentation]] | |
์ฐ๋ฆฌ๋ ์ธ์ ๋ ๋ ๋ช ํํ๊ณ ์ ํํ ๋ฌธ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ์ฌ ๊ฐ์ ์ ์ ์ฐพ๊ณ ์์ต๋๋ค. ์คํ์๋ ๋ถ์กฑํ ๋ด์ฉ, ๋ถ๋ช ํ์ง ์๊ฑฐ๋ ๋ถ์ ํํ ๋ด์ฉ ๋ฑ์ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ด์ฌ์ด ์์ผ์๋ค๋ฉด ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ธฐ์ฌํ์ค ์ ์๋๋ก ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค! | |
๋ฌธ์๋ฅผ ์์ฑ, ๋น๋ ๋ฐ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [README](https://github.com/huggingface/transformers/tree/main/docs) ๋ฌธ์๋ฅผ ํ์ธํด ์ฃผ์ธ์. | |
## ํ ๋ฆฌํ์คํธ(Pull Request) ์์ฑํ๊ธฐ [[create-a-pull-request]] | |
์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๊ธฐ์กด์ Pull Request๋ ์ด์๋ฅผ ๊ฒ์ํ์ฌ ๋๊ตฐ๊ฐ ์ด๋ฏธ ๋์ผํ ์์ ์ ํ๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์คํ์ง ์๋ค๋ฉด ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ํด ์ด์๋ฅผ ์ด์ด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. | |
๐ค Transformers์ ๊ธฐ์ฌํ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ธ `git` ์ฌ์ฉ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค. `git`์ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋๊ตฌ๋ ์๋์ง๋ง, ๋งค์ฐ ํ๋ฅญํ ๋งค๋ด์ผ์ ์ ๊ณตํฉ๋๋ค. ์(shell)์์ `git --help`์ ์ ๋ ฅํ์ฌ ํ์ธํด๋ณด์ธ์! ๋ง์ฝ ์ฑ ์ ์ ํธํ๋ค๋ฉด, [Pro Git](https://git-scm.com/book/en/v2)์ ๋งค์ฐ ์ข์ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋ ๊ฒ์ ๋๋ค. | |
๐ค Transformers์ ๊ธฐ์ฌํ๋ ค๋ฉด **[Python 3.8]((https://github.com/huggingface/transformers/blob/main/setup.py#L426))** ์ด์์ ๋ฒ์ ์ด ํ์ํฉ๋๋ค. ๊ธฐ์ฌ๋ฅผ ์์ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์: | |
1. ์ ์ฅ์ ํ์ด์ง์์ **[Fork](https://github.com/huggingface/transformers/fork)** ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ฅ์๋ฅผ ํฌํฌํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ๋ณต์ฌ๋ณธ์ด ์ฌ๋ฌ๋ถ์ GitHub ์ฌ์ฉ์ ๊ณ์ ์๋์ ์์ฑ๋ฉ๋๋ค. | |
2. ํฌํฌํ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ๋์คํฌ๋ก ํด๋ก ํ๊ณ , ๊ธฐ๋ณธ ์ ์ฅ์๋ฅผ ์๊ฒฉ(remote)์ผ๋ก ์ถ๊ฐํ์ธ์: | |
```bash | |
git clone [email protected]:<your Github handle>/transformers.git | |
cd transformers | |
git remote add upstream https://github.com/huggingface/transformers.git | |
``` | |
3. ๊ฐ๋ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ ์ ๋ธ๋์น๋ฅผ ์์ฑํ์ธ์: | |
```bash | |
git checkout -b a-descriptive-name-for-my-changes | |
``` | |
๐จ ์ ๋ `main` ๋ธ๋์น์์ ์์ ํ์ง **๋ง์ธ์!** | |
4. ๊ฐ์ ํ๊ฒฝ์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ์ธ์: | |
```bash | |
pip install -e ".[dev]" | |
``` | |
๋ง์ฝ ์ด๋ฏธ ๊ฐ์ ํ๊ฒฝ์ ๐ค Transformers๊ฐ ์ค์น๋์ด ์๋ค๋ฉด, `-e` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ๊ธฐ ์ ์ `pip uninstall transformers`๋ก ์ ๊ฑฐํด์ฃผ์ธ์. | |
์ฌ๋ฌ๋ถ์ ์ด์์ฒด์ ์ ๋ฐ๋ผ์, ๊ทธ๋ฆฌ๊ณ ๐ค Transformers์ ์ ํ์ ์์กด์ฑ์ ์๊ฐ ์ฆ๊ฐํ๋ฉด์, ์ด ๋ช ๋ น์ด ์คํจํ ์๋ ์์ต๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ค๋ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ(PyTorch, TensorFlow, ๊ทธ๋ฆฌ๊ณ /๋๋ Flax)๋ฅผ ์ค์นํ ํ ์๋ ๋ช ๋ น์ ์คํํด์ฃผ์ธ์: | |
```bash | |
pip install -e ".[quality]" | |
``` | |
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๊ฒ์ผ๋ก ์ถฉ๋ถํ ๊ฒ์ ๋๋ค. | |
5. ๋ธ๋์น์์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ์ธ์. | |
์ฝ๋๋ฅผ ์์ ํ๋ ๋์ ํ ์คํธ ์ค์ํธ(test suite)๊ฐ ํต๊ณผํ๋์ง ํ์ธํ์ธ์. ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ํ ์คํธ๋ฅผ ์คํํ์ธ์: | |
```bash | |
pytest tests/<TEST_TO_RUN>.py | |
``` | |
ํ ์คํธ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ [ํ ์คํธ](https://huggingface.co/docs/transformers/testing) ๊ฐ์ด๋๋ฅผ ํ์ธํ์ธ์. | |
๐ค Transformers๋ `black`๊ณผ `ruff`๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋์ ํ์์ ์ผ๊ด๋๊ฒ ์ ์งํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ํ์๋ ๋ค์ ๋ช ๋ น์ผ๋ก ์๋์ผ๋ก ์คํ์ผ ๊ต์ ๋ฐ ์ฝ๋ ๊ฒ์ฆ์ ์ํํ์ธ์: | |
```bash | |
make fixup | |
``` | |
์ด๊ฒ์ ๋ํ ์์ ์ค์ธ PR์์ ์์ ํ ํ์ผ์์๋ง ์๋ํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. | |
๊ฒ์ฌ๋ฅผ ํ๋์ฉ ์คํํ๋ ค๋ ๊ฒฝ์ฐ, ๋ค์ ๋ช ๋ น์ผ๋ก ์คํ์ผ ๊ต์ ์ ์ ์ฉํ ์ ์์ต๋๋ค: | |
```bash | |
make style | |
``` | |
๐ค Transformers๋ ๋ํ `ruff`์ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฉ ์ค์๋ฅผ ํ์ธํฉ๋๋ค. CI๋ฅผ ํตํด ํ์ง ๊ด๋ฆฌ๊ฐ ์ํ๋์ง๋ง, ๋ค์ ๋ช ๋ น์ผ๋ก ๋์ผํ ๊ฒ์ฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค: | |
```bash | |
make quality | |
``` | |
๋ง์ง๋ง์ผ๋ก, ์ ๋ชจ๋ธ์ ์ถ๊ฐํ ๋ ์ผ๋ถ ํ์ผ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์์ง ์๋๋ก ํ๊ธฐ ์ํ ๋ง์ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ๋ค์ ๋ช ๋ น์ผ๋ก ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค: | |
```bash | |
make repo-consistency | |
``` | |
์ด๋ฌํ ๊ฒ์ฌ์ ๋ํด ์์ธํ ์์๋ณด๊ณ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ [Pull Request์ ๋ํ ๊ฒ์ฌ](https://huggingface.co/docs/transformers/pr_checks) ๊ฐ์ด๋๋ฅผ ํ์ธํ์ธ์. | |
๋ง์ฝ `docs/source` ๋๋ ํฐ๋ฆฌ ์๋์ ๋ฌธ์๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ, ๋ฌธ์๊ฐ ๋น๋๋ ์ ์๋์ง ํ์ธํ์ธ์. ์ด ๊ฒ์ฌ๋ Pull Request๋ฅผ ์ด ๋๋ CI์์ ์คํ๋ฉ๋๋ค. ๋ก์ปฌ ๊ฒ์ฌ๋ฅผ ์คํํ๋ ค๋ฉด ๋ฌธ์ ๋น๋๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค: | |
```bash | |
pip install ".[docs]" | |
``` | |
์ ์ฅ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์: | |
```bash | |
doc-builder build transformers docs/source/en --build_dir ~/tmp/test-build | |
``` | |
์ด ๋ช ๋ น์ `~/tmp/test-build` ํด๋์ ๋ฌธ์๋ฅผ ๋น๋ํ๋ฉฐ, ์์ฑ๋ Markdown ํ์ผ์ ์ ํธํ๋ ํธ์ง๊ธฐ๋ก ํ์ธํ ์ ์์ต๋๋ค. Pull Request๋ฅผ ์ด ๋ GitHub์์ ๋ฌธ์๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์๋ ์์ต๋๋ค. | |
๋ณ๊ฒฝ ์ฌํญ์ ๋ง์กฑํ๋ฉด `git add`๋ก ๋ณ๊ฒฝ๋ ํ์ผ์ ์ถ๊ฐํ๊ณ , `git commit`์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ก์ปฌ์ ๊ธฐ๋กํ์ธ์: | |
```bash | |
git add modified_file.py | |
git commit | |
``` | |
[์ข์ ์ปค๋ฐ ๋ฉ์์ง](https://chris.beams.io/posts/git-commit/)๋ฅผ ์์ฑํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋ช ํํ๊ฒ ์ ๋ฌํ์ธ์! | |
๋ณ๊ฒฝ ์ฌํญ์ ํ๋ก์ ํธ ์๋ณธ ์ ์ฅ์์ ๋๊ธฐํํ๋ ค๋ฉด, PR์ *์ด๊ธฐ ์ ์* ๋ธ๋์น๋ฅผ `upstream/branch`๋ก ๋ฆฌ๋ฒ ์ด์ค(rebase)ํ์ธ์. ๋๋ ๊ด๋ฆฌ์์ ์์ฒญ์ ์ด ์์ ์ด ํ์ํ ์ ์์ต๋๋ค: | |
```bash | |
git fetch upstream | |
git rebase upstream/main | |
``` | |
๋ณ๊ฒฝ ์ฌํญ์ ๋ธ๋์น์ ํธ์ํ์ธ์: | |
```bash | |
git push -u origin a-descriptive-name-for-my-changes | |
``` | |
์ด๋ฏธ PR์ ์ด์๋ค๋ฉด, `--force` ํ๋๊ทธ์ ํจ๊ป ๊ฐ์ ํธ์ํด์ผ ํฉ๋๋ค. ์์ง PR์ด ์ด๋ฆฌ์ง ์์๋ค๋ฉด ์ ์์ ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ํธ์ํ๋ฉด ๋ฉ๋๋ค. | |
6. ์ด์ GitHub์์ ํฌํฌํ ์ ์ฅ์๋ก ์ด๋ํ๊ณ **Pull request(ํ ๋ฆฌํ์คํธ)**๋ฅผ ํด๋ฆญํ์ฌ Pull Request๋ฅผ ์ด ์ ์์ต๋๋ค. ์๋์ [์ฒดํฌ๋ฆฌ์คํธ](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md/#pull-request-checklist)์์ ๋ชจ๋ ํญ๋ชฉ์ ์ฒดํฌ ํ์๋ฅผ ํ์ธ์. ์ค๋น๊ฐ ์๋ฃ๋๋ฉด ํ๋ก์ ํธ ๊ด๋ฆฌ์์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๋ด ๊ฒํ ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. | |
7. ๊ด๋ฆฌ์๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์์ฒญํด๋ ๊ด์ฐฎ์ต๋๋ค. ํต์ฌ ๊ธฐ์ฌ์๋ค๋ ๋์ผํ ์ํฉ์ ๊ฒช์ต๋๋ค! ๋ชจ๋๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ Pull Request์์ ๋ณผ ์ ์๋๋ก, ๋ก์ปฌ ๋ธ๋์น์์ ์์ ํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํฌํ ์ ์ฅ์๋ก ํธ์ํ์ธ์. ๊ทธ๋ฌ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก Pull Request์ ๋ํ๋ฉ๋๋ค. | |
### Pull Request ์ฒดํฌ๋ฆฌ์คํธ [[pull-request-checklist]] | |
โ Pull Request ์ ๋ชฉ์ ๊ธฐ์ฌ ๋ด์ฉ์ ์์ฝํด์ผ ํฉ๋๋ค.<br> | |
โ Pull Request๊ฐ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ, Pull Request ์ค๋ช ์ ์ด์ ๋ฒํธ๋ฅผ ์ธ๊ธํ์ฌ ์ฐ๊ด๋์ด ์์์ ์๋ ค์ฃผ์ธ์. (์ด์๋ฅผ ํ์ธํ๋ ์ฌ๋๋ค์ด ํด๋น ์ด์์ ๋ํ ์์ ์ด ์งํ ์ค์์ ์ ์ ์๊ฒ ํฉ๋๋ค).<br> | |
โ ์์ ์ด ์งํ์ค์ด๋ผ๋ฉด ์ ๋ชฉ ์์ `[WIP]`๋ฅผ ๋ถ์ฌ์ฃผ์ธ์. ์ค๋ณต ์์ ์ ํผํ๊ณ ๋ณํฉํ ์ค๋น๊ฐ ๋ PR๊ณผ ๊ตฌ๋ถํ๊ธฐ์ ์ ์ฉํฉ๋๋ค.<br> | |
โ ๊ธฐ์กด ํ ์คํธ๋ฅผ ํต๊ณผํ๋์ง ํ์ธํ์ธ์.<br> | |
โ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ํด๋น ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ๋ ์ถ๊ฐํ์ธ์.<br> | |
- ์ ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, `ModelTester.all_model_classes = (MyModel, MyModelWithLMHead,...)`์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ์ ์ธ ํ ์คํธ๋ฅผ ํ์ฑํํ์ธ์. | |
- ์ `@slow` ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ๋ค์ ๋ช ๋ น์ผ๋ก ํ ์คํธ๋ฅผ ํต๊ณผํ๋์ง ํ์ธํ์ธ์: `RUN_SLOW=1 python -m pytest tests/models/my_new_model/test_my_new_model.py`. | |
- ์ ํ ํฌ๋์ด์ ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ๋ค์ ๋ช ๋ น์ผ๋ก ํ ์คํธ๋ฅผ ํต๊ณผํ๋์ง ํ์ธํ์ธ์: `RUN_SLOW=1 python -m pytest tests/models/{your_model_name}/test_tokenization_{your_model_name}.py`. | |
- CircleCI์์๋ ๋๋ฆฐ ํ ์คํธ๋ฅผ ์คํํ์ง ์์ง๋ง, GitHub Actions์์๋ ๋งค์ผ ๋ฐค ์คํ๋ฉ๋๋ค!<br> | |
โ ๋ชจ๋ ๊ณต๊ฐ ๋ฉ์๋๋ ์ ์ฉํ ๊ธฐ์ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค (์๋ฅผ ๋ค์ด [`modeling_bert.py`](https://github.com/huggingface/transformers/blob/main/src/transformers/models/bert/modeling_bert.py) ์ฐธ์กฐ).<br> | |
โ ์ ์ฅ์๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์์ผ๋ฏ๋ก ์ ์ฅ์์ ์๋นํ ๋ถ๋ด์ ์ฃผ๋ ์ด๋ฏธ์ง, ๋์์ ๋ฐ ๊ธฐํ ํ ์คํธ๊ฐ ์๋ ํ์ผ์ ์ถ๊ฐํ์ง ๋ง์ธ์. ๋์ [`hf-internal-testing`](https://huggingface.co/hf-internal-testing)๊ณผ ๊ฐ์ Hub ์ ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ์ผ์ ํธ์คํ ํ๊ณ URL๋ก ์ฐธ์กฐํ์ธ์. ๋ฌธ์์ ๊ด๋ จ๋ ์ด๋ฏธ์ง๋ ๋ค์ ์ ์ฅ์์ ๋ฐฐ์นํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค: [huggingface/documentation-images](https://huggingface.co/datasets/huggingface/documentation-images). ์ด ๋ฐ์ดํฐ์ ์ ์ฅ์์์ PR์ ์ด์ด์ Hugging Face ๋ฉค๋ฒ์๊ฒ ๋ณํฉ์ ์์ฒญํ ์ ์์ต๋๋ค. | |
Pull Request์์ ์คํ๋๋ ๊ฒ์ฌ์ ๋ํ ์์ธํ ์ ๋ณด๋ [Pull Request์ ๋ํ ๊ฒ์ฌ](https://huggingface.co/docs/transformers/pr_checks) ๊ฐ์ด๋๋ฅผ ํ์ธํ์ธ์. | |
### ํ ์คํธ [[tests]] | |
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์๊ณผ ์ฌ๋ฌ ์์ ๋ฅผ ํ ์คํธํ ์ ์๋ ๊ด๋ฒ์ํ ํ ์คํธ ์ค์ํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ ์คํธ๋ [tests](https://github.com/huggingface/transformers/tree/main/tests) ํด๋์, ์์ ํ ์คํธ๋ [examples](https://github.com/huggingface/transformers/tree/main/examples) ํด๋์ ์์ต๋๋ค. | |
์๋๊ฐ ๋น ๋ฅธ `pytest`์ `pytest-xdist`๋ฅผ ์ ํธํฉ๋๋ค. ์ ์ฅ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์์ ํ ์คํธ๋ฅผ ์คํํ *ํ์ ํด๋ ๊ฒฝ๋ก ๋๋ ํ ์คํธ ํ์ผ ๊ฒฝ๋ก*๋ฅผ ์ง์ ํ์ธ์. | |
```bash | |
python -m pytest -n auto --dist=loadfile -s -v ./tests/models/my_new_model | |
``` | |
๋ง์ฐฌ๊ฐ์ง๋ก `examples` ๋๋ ํฐ๋ฆฌ์์๋ *ํ์ ํด๋ ๊ฒฝ๋ก ๋๋ ํ ์คํธ ํ์ผ ๊ฒฝ๋ก*๋ฅผ ์ง์ ํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ช ๋ น์ PyTorch `examples` ๋๋ ํฐ๋ฆฌ์ ํ ์คํธ ๋ถ๋ฅ ํ์ ํด๋๋ฅผ ํ ์คํธํฉ๋๋ค: | |
```bash | |
pip install -r examples/xxx/requirements.txt # only needed the first time | |
python -m pytest -n auto --dist=loadfile -s -v ./examples/pytorch/text-classification | |
``` | |
์ด๊ฒ์ด ์ค์ ๋ก `make test` ๋ฐ `make test-examples` ๋ช ๋ น์ด ๊ตฌํ๋๋ ๋ฐฉ์์ ๋๋ค (`pip install`์ ์ ์ธํฉ๋๋ค)! | |
๋ํ ํน์ ๊ธฐ๋ฅ๋ง ํ ์คํธํ๊ธฐ ์ํ ๋ ์์ ํ ์คํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. | |
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฆฐ ํ ์คํธ๋ ๊ฑด๋๋ฐ์ง๋ง `RUN_SLOW` ํ๊ฒฝ ๋ณ์๋ฅผ `yes`๋ก ์ค์ ํ์ฌ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ง์ ๊ธฐ๊ฐ๋ฐ์ดํธ ๋จ์์ ๋ชจ๋ธ์ด ๋ค์ด๋ก๋๋๋ฏ๋ก ์ถฉ๋ถํ ๋์คํฌ ๊ณต๊ฐ, ์ข์ ์ธํฐ๋ท ์ฐ๊ฒฐ๊ณผ ๋ง์ ์ธ๋ด๊ฐ ํ์ํฉ๋๋ค! | |
<Tip warning={true}> | |
ํ ์คํธ๋ฅผ ์คํํ๋ ค๋ฉด *ํ์ ํด๋ ๊ฒฝ๋ก ๋๋ ํ ์คํธ ํ์ผ ๊ฒฝ๋ก*๋ฅผ ์ง์ ํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด `tests` ๋๋ `examples` ํด๋์ ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๊ฒ ๋์ด ๋งค์ฐ ๊ธด ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค! | |
</Tip> | |
```bash | |
RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./tests/models/my_new_model | |
RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./examples/pytorch/text-classification | |
``` | |
๋๋ฆฐ ํ ์คํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ ์ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์๋ ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์๋ ์์ต๋๋ค: | |
- `RUN_CUSTOM_TOKENIZERS`: ์ฌ์ฉ์ ์ ์ ํ ํฌ๋์ด์ ํ ์คํธ๋ฅผ ํ์ฑํํฉ๋๋ค. | |
- `RUN_PT_FLAX_CROSS_TESTS`: PyTorch + Flax ํตํฉ ํ ์คํธ๋ฅผ ํ์ฑํํฉ๋๋ค. | |
- `RUN_PT_TF_CROSS_TESTS`: TensorFlow + PyTorch ํตํฉ ํ ์คํธ๋ฅผ ํ์ฑํํฉ๋๋ค. | |
๋ ๋ง์ ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐ ์ ๋ณด๋ [testing_utils.py](src/transformers/testing_utils.py)์์ ์ฐพ์ ์ ์์ต๋๋ค. | |
๐ค Transformers๋ ํ ์คํธ ์คํ๊ธฐ๋ก `pytest`๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ ์คํธ ์ค์ํธ ์์ฒด์์๋ `pytest` ๊ด๋ จ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. | |
์ด๊ฒ์ `unittest`๊ฐ ์์ ํ ์ง์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ค์์ `unittest`๋ก ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค: | |
```bash | |
python -m unittest discover -s tests -t . -v | |
python -m unittest discover -s examples -t examples -v | |
``` | |
### ์คํ์ผ ๊ฐ์ด๋ [[style-guide]] | |
๋ฌธ์๋ [Google Python ์คํ์ผ ๊ฐ์ด๋](https://google.github.io/styleguide/pyguide.html)๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์์ธํ ์ ๋ณด๋ [๋ฌธ์ ์์ฑ ๊ฐ์ด๋](https://github.com/huggingface/transformers/tree/main/docs#writing-documentation---specification)๋ฅผ ํ์ธํ์ธ์. | |
### Windows์์ ๊ฐ๋ฐ [[develop-on-windows]] | |
Windows์์ ๊ฐ๋ฐํ ๊ฒฝ์ฐ([Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/) ๋๋ WSL์์ ์์ ํ์ง ์๋ ํ) Windows `CRLF` ์ค ๋ฐ๊ฟ์ Linux `LF` ์ค ๋ฐ๊ฟ์ผ๋ก ๋ณํํ๋๋ก git์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค: | |
```bash | |
git config core.autocrlf input | |
``` | |
Windows์์ `make` ๋ช ๋ น์ ์คํํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ MSYS2๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค: | |
1. [MSYS2](https://www.msys2.org/)๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. `C:\msys64`์ ์ค์น๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. | |
2. CLI์์ `C:\msys64\msys2.exe`๋ฅผ ์ฝ๋๋ค (์์ ๋ฉ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํด์ผ ํจ). | |
3. ์์์ ๋ค์์ ์คํํ์ฌ: `pacman -Syu` ๋ฐ `pacman -S make`๋ก `make`๋ฅผ ์ค์นํฉ๋๋ค. | |
4. ํ๊ฒฝ ๋ณ์ PATH์ `C:\msys64\usr\bin`์ ์ถ๊ฐํ์ธ์. | |
์ด์ ๋ชจ๋ ํฐ๋ฏธ๋ (Powershell, cmd.exe ๋ฑ)์์ `make`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค! ๐ | |
### ํฌํฌํ ์ ์ฅ์๋ฅผ ์์ ์๋ณธ ๋ธ๋์น(main)๊ณผ ๋๊ธฐํํ๊ธฐ (Hugging Face ์ ์ฅ์) [[sync-a-forked-repository-with-upstream-main-the-hugging-face-repository]] | |
ํฌํฌํ ์ ์ฅ์์ main ๋ธ๋์น๋ฅผ ์ ๋ฐ์ดํธํ ๋, ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ์ํํด์ฃผ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ upstream PR์ ์ฐธ์กฐ ๋ ธํธ๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ํผํ๊ณ ์ด๋ฌํ PR์ ๊ด์ฌํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ถํ์ํ ์๋ฆผ์ด ์ ์ก๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. | |
1. ๊ฐ๋ฅํ๋ฉด ํฌํฌ๋ ์ ์ฅ์์ ๋ธ๋์น ๋ฐ PR์ ์ฌ์ฉํ์ฌ upstream๊ณผ ๋๊ธฐํํ์ง ๋ง์ธ์. ๋์ ํฌํฌ๋ main ์ ์ฅ์์ ์ง์ ๋ณํฉํ์ธ์. | |
2. PR์ด ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ, ๋ธ๋์น๋ฅผ ํ์ธํ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ธ์: | |
```bash | |
git checkout -b your-branch-for-syncing | |
git pull --squash --no-commit upstream main | |
git commit -m '<your message without GitHub references>' | |
git push --set-upstream origin your-branch-for-syncing | |
``` |