원격에서 더 이상 추적 분기 제거
원격 등가물이 더 이상 존재하지 않는 모든 추적 분기를 삭제하는 간단한 방법이 있습니까?
예:
지점 (로컬 및 원격)
- 석사
- 원산지 / 마스터
- 출처 / 버그 수정
- 출처 / 버그 수정 -b
- 출처 / 버그 수정 -c
로컬에서는 마스터 브랜치 만 있습니다. 이제 bug-fix-a 작업을해야 하므로 확인하고 작업하고 변경 사항을 리모컨으로 푸시합니다. 다음으로 bug-fix-b를 사용 합니다.
지점 (로컬 및 원격)
- 석사
- 버그 수정
- 버그 수정 b
- 원산지 / 마스터
- 출처 / 버그 수정
- 출처 / 버그 수정 -b
- 출처 / 버그 수정 -c
이제 로컬 브랜치 master , bug-fix-a , bug-fix-b가 있습니다. 마스터 브랜치 관리자는 변경 사항을 마스터에 병합하고 이미 병합 한 모든 브랜치를 삭제합니다.
따라서 현재 상태는 다음과 같습니다.
지점 (로컬 및 원격)
- 석사
- 버그 수정
- 버그 수정 b
- 원산지 / 마스터
- 출처 / 버그 수정 -c
이제 원격 저장소에 더 이상 표시되지 않는 브랜치 (이 경우 bug-fix-a , bug-fix-b ) 를 삭제하는 명령을 호출하고 싶습니다 .
기존 명령 git remote prune origin
과 비슷하지만 더 비슷 git local prune origin
합니다.
git remote prune origin
원격에 있지 않은 가지를 추적하는 자두.
git branch --merged
현재 분기에 병합 된 분기를 나열합니다.
xargs git branch -d
표준 입력에 나열된 분기를 삭제합니다.
에 의해 나열된 분기를 삭제하는 데주의하십시오 git branch --merged
. 목록에는 master
삭제를 원하지 않는 분기 가 포함될 수 있습니다 .
분기를 삭제하기 전에 목록을 편집 할 수있는 기회를 제공하려면 다음을 한 줄로 수행 할 수 있습니다.
git branch --merged >/tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d </tmp/merged-branches
명령 후
git fetch -p
실행할 때 원격 참조를 제거합니다.
git branch -vv
원격 상태로 '사라짐'이 표시됩니다. 예를 들면
$ git branch -vv
master b900de9 [origin/master: behind 4] Fixed bug
release/v3.8 fdd2f4e [origin/release/v3.8: behind 2] Fixed bug
release/v3.9 0d680d0 [origin/release/v3.9: behind 2] Updated comments
bug/1234 57379e4 [origin/bug/1234: gone] Fixed bug
따라서 원격으로 이동 한 로컬 분기를 제거하는 간단한 스크립트를 작성할 수 있습니다.
git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done
이 답변의 대부분은 실제로 원래 질문에 대한 답변이 아닙니다. 나는 많은 파기를했고 이것이 내가 찾은 가장 깨끗한 해결책이었습니다. 다음은 그 대답의 약간 더 철저한 버전입니다.
- 기본 브랜치를 확인하십시오. 보통
git checkout master
- 운영
git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d
설명:
추적 분기를 정리 한 다음에서 "사라진"것으로 표시되는 로컬 분기를 삭제하여 작동합니다 git branch -vv
.
메모:
귀하의 언어가 영어가 아닌 다른 것으로 설정되어있는 gone
경우 적절한 단어 로 변경 해야합니다. 로컬 전용 지점은 건드리지 않습니다. 원격에서 삭제되었지만 병합되지 않은 분기는 알림을 표시하지만 로컬에서는 삭제되지 않습니다. 당신이 그를 삭제하려면뿐만 아니라 변경 -d
에 -D
.
나는 이미 16 개의 답이있는 질문에는 보통 답하지 않지만 다른 답은 모두 틀렸고 정답은 너무 간단합니다. 질문은 "원격에 해당하는 분기가 더 이상 존재하지 않는 모든 추적 분기를 삭제하는 간단한 방법이 있습니까?"라고 말합니다.
"단순"이란 모든 독자가 가질 수있는 도구에 의존하지 않고 깨지기 쉽고 위험하지 않고 한 번에 모두 삭제하는 것을 의미한다면 정답은 아니오입니다.
일부 답변은 간단하지만 요청한대로 수행하지 않습니다. 다른 사람들은 요청 된대로 수행하지만 간단하지 않습니다. 모든 시스템에는 텍스트 조작 명령이나 스크립팅 언어를 통해 Git 출력을 구문 분석하는 데 의존합니다. 또한 대부분의 제안은 출력이 스크립트로 구문 분석되도록 설계되지 않은 porcelain 명령을 사용합니다 ( "porcelain"은 사람이 조작 할 수있는 명령을 나타내며 스크립트는 하위 수준 "plumbing"명령을 사용해야 함).
추가 읽기 :
이 작업을 안전하게 수행하려면 질문의 사용 사례 (서버에서 삭제되었지만 여전히 로컬 분기로 존재하는 가비지 수집 추적 분기) 및 고급 Git 명령 만 사용하려면 다음을 수행해야합니다.
git fetch --prune
(또는git fetch -p
별명이거나git prune remote origin
가져 오지 않고 동일한 작업을 수행하며 대부분의 경우 원하는 것이 아닐 수 있음).- 삭제 된 것으로보고 된 원격 분기를 기록하십시오. 또는 나중에 찾아 보려면
git branch -v
분리 된 추적 분기가 "[사라짐]"으로 표시됩니다. git branch -d [branch_name]
고아 추적 분기마다
(다른 답변 중 일부가 제안하는 것입니다).
솔루션을 스크립팅하려는 경우 Mark Longair의 답변 과 다른 질문에 대한 답변 에서와 for-each-ref
같이 시작점이 되지만 쉘 스크립트 루프를 작성하거나 xargs 등을 사용하지 않고는이를 악용하는 방법을 볼 수 없습니다. .
배경 설명
무슨 일이 일어나고 있는지 이해하려면 지점을 추적하는 상황에서 지점이 하나가 아니라 3 개라는 점을 인식해야합니다. (그리고 "분기"는 단순히 커밋에 대한 포인터를 의미합니다.)
추적 분기가 주어지면 feature/X
원격 저장소 (서버)에이 분기가 있고이를 feature/X
. 로컬 리포지토리에는 remotes/origin/feature/X
"이것이 리모트가 마지막으로 이야기했을 때 기능 / X 브랜치라고 말한 것입니다"라는 의미의 브랜치가 있으며 마지막으로 로컬 리포지토리에는 feature/X
최근 커밋을 가리키는 브랜치가 있으며 다음과 같이 구성됩니다. "track" remotes/origin/feature/X
, 즉, 당기고 밀면 정렬 상태를 유지할 수 있습니다.
어떤 시점에서 누군가가 feature/X
리모컨 에서을 삭제했습니다 . 그 순간부터, 당신은 당신의 로컬 feature/X
(기능 X에 대한 작업은 아마도 끝났기 때문에 아마 더 이상 원하지 않을 것입니다) 과 함께 남게되며 , remotes/origin/feature/X
유일한 목적은 서버의 브랜치의 상태를 기억하는 것이기 때문에 확실히 쓸모가 없습니다. .
그리고 Git을 사용하면 중복 된 항목을 자동으로 정리할 수 있습니다. remotes/origin/feature/X
그게 기능입니다. git fetch --prune
하지만 어떤 이유로 든 자동으로 자신을 삭제할 수는 없습니다. 아직 고아 추적 정보가 포함되어 feature/X
있어도 feature/X
정보가 있습니다. 완전히 병합 된 이전 추적 분기를 식별합니다. (결국, 그것은 줄 수있는 당신에게 당신이 손으로 직접 작업을 수행 할 수 있습니다 정보를.)
여기서 답을 찾았습니다. 병합 된 모든 git 브랜치를 어떻게 삭제할 수 있습니까?
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
우리는 마스터를 유지하십시오
당신을 확인 할 수 있습니다 master
, 또는 그 문제에 대한 다른 지점은, 다른를 추가로 제거되지 않는 grep
첫 번째 후. 이 경우 다음을 수행합니다.
git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d
그래서 만약 우리가 유지하고 싶어 master
, develop
그리고 staging
예를 들어, 우리는 갈 것입니다 :
git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d
이것을 별칭으로 만들기
약간 길기 때문에 .zshrc
또는에 별칭을 추가 할 수 있습니다 .bashrc
. 광산 호출된다 gbpurge
(위해 git branches purge
) :
alias gbpurge='git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d'
그런 다음 .bashrc
또는 .zshrc
:
. ~/.bashrc
또는
. ~/.zshrc
해결책이 여기있는 것 같습니다 – https://stackoverflow.com/a/1072178/133986
요컨대, git remote prune
마법은
마스터로 병합 된 모든 분기를 제거하되 마스터 자체를 제거하지 마십시오.
git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)
또는 별칭 추가 :
alias gitcleanlocal="git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)"
설명:
git checkout master
체크 아웃 마스터 브랜치
git pull origin master
로컬 지점에 모든 원격 변경 사항이 병합되었는지 확인
git fetch -p
삭제 된 원격 분기에 대한 참조 제거
git branch -d $(git branch master --merged | grep master -v)
마스터로 병합 된 모든 브랜치를 삭제하되 마스터 자체를 제거하지 마십시오.
Windows 솔루션
Microsoft Windows Powershell의 경우 :
git checkout master; git remote update origin --prune; git branch -vv | Select-String -Pattern ": gone]" | % { $_.toString().Trim().Split(" ")[0]} | % {git branch -d $_}
설명
git checkout master
마스터 브랜치로 전환
git remote update origin --prune
원격 가지를 가지 치기
git branch -vv
모든 분기의 자세한 출력을 얻습니다 ( git reference )
Select-String -Pattern ": gone]"
원격에서 제거 된 레코드 만 가져옵니다.
% { $_.toString().Trim().Split(" ")[0]}
지점 이름을 얻다
% {git branch -d $_}
분기를 삭제합니다
대부분의 다른 솔루션에서 "gone"에 대한 패턴 매칭은 저에게 약간 무서웠습니다. 안전을 위해 --format
플래그를 사용하여 각 지점의 업스트림 추적 상태 를 가져옵니다 .
Windows 용 버전이 필요했기 때문에 Powershell을 사용하여 "사라진"것으로 표시된 모든 분기가 삭제됩니다.
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname:short)%(end)" |
? { $_ -ne "" } |
% { git branch -D $_ }
첫 번째 줄에는 업스트림 분기가 "사라진"로컬 분기의 이름이 나열됩니다. 다음 줄은 빈 줄 ( "사라지지 않은"분기에 대한 출력)을 제거한 다음 분기 이름을 명령에 전달하여 분기를 삭제합니다.
git fetch -p
이됩니다 치기 없습니다 더 이상 원격에 존재하는 어떤 지점을.
마스터를 제외한 모든 로컬 브랜치를 지우고 개발하는 간단한 한 줄에 유용 할 수 있습니다.
git branch | grep -v "master" | grep -v "develop" | xargs git branch -D
이렇게하면 로컬 마스터 참조와 현재 사용중인 참조를 제외한 모든 병합 된 로컬 분기가 삭제됩니다.
git branch --merged | grep -v "*" | grep -v "master" | xargs git branch -d
그리고 이것은 " origin "이 참조하는 원격 저장소에서 이미 제거 된 모든 브랜치를 삭제 하지만 " remotes / origin " 에서 여전히 로컬로 사용할 수 있습니다 .
git remote prune origin
이 작업을 수행하는 기본 제공 명령이 없다고 생각하지만 다음을 수행하는 것이 안전합니다.
git checkout master
git branch -d bug-fix-a
을 사용할 때 -d
git은 분기 HEAD
또는 업스트림 원격 추적 분기에 완전히 병합되지 않는 한 분기 삭제를 거부합니다 . 따라서 항상 출력을 반복하고 git for-each-ref
각 분기를 삭제하려고 할 수 있습니다. 이 접근 방식의 문제 는 기록이 포함되어 bug-fix-d
있기 때문에 삭제를 원하지 않을 것입니다 origin/bug-fix-d
. 대신 다음과 같은 스크립트를 만들 수 있습니다.
#!/bin/sh
git checkout master &&
for r in $(git for-each-ref refs/heads --format='%(refname:short)')
do
if [ x$(git merge-base master "$r") = x$(git rev-parse --verify "$r") ]
then
if [ "$r" != "master" ]
then
git branch -d "$r"
fi
fi
done
경고 :이 스크립트를 테스트하지 않았습니다.주의해서 만 사용하십시오 ...
더미에 대한 또 다른 대답, Patrick의 대답 ( 출력 gone]
에서 일치 하는 위치에 대한 모호함을 없애기 때문에 git branch
좋아함)에서 많이 도출했지만 * nix 구부러진 추가 :
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d' \
| xargs git branch -D
git-gone
내 경로 의 스크립트 에이 내용이 포함되어 있습니다 .
#!/usr/bin/env bash
action() {
${DELETE} && xargs git branch -D || cat
}
get_gone() {
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d'
}
main() {
DELETE=false
while [ $# -gt 0 ] ; do
case "${1}" in
(-[dD] | --delete) DELETE=true ;;
esac
shift
done
get_gone | action
}
main "${@}"
주의-이 --format
옵션은 상당히 새로운 것 같습니다. 나는 그것을 얻기 위해 2.10.something에서 2.16.3으로 git을 업그레이드해야했습니다.
위의 정보를 바탕으로 이것은 나를 위해 일했습니다.
git br -d `git br -vv | grep ': gone] ' | awk '{print $1}' | xargs`
': gone] '
원격에있는 모든 로컬 분기를 제거합니다 .
grep gone <(git branch -v) | cut -d ' ' -f 3 | xargs git branch -d
위의 명령은 원격에서 병합 및 삭제 된 분기를 가져 오는 데 사용할 수 있으며 원격에서 더 이상 사용할 수없는 로컬 분기를 삭제합니다.
이 중 어느 것도 나에게 옳지 않았습니다. 원격 분기를 추적하는 모든 로컬 분기를 제거 할 수있는 무언가를 원 origin
했습니다. 원격 분기가 삭제 된에서 ( gone
). 원격 브랜치를 추적하도록 설정되지 않은 로컬 브랜치 (예 : 내 로컬 개발 브랜치)를 삭제하고 싶지 않았습니다. 또한 git
사용자 지정 스크립트를 작성하는 대신, 또는 기타 간단한 CLI 도구를 사용하는 간단한 한 줄짜리를 원했습니다 . 나는 이 간단한 명령을 만들기 위해 grep
그리고 약간을 사용 awk
하게되었다.
이것은 궁극적으로 내 ~/.gitconfig
:
[alias]
prune-branches = !git remote prune origin && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D
다음과 git config --global ...
같이 쉽게 추가 할 수 있는 명령이 있습니다 git prune-branches
.
git config --global alias.prune-branches '!git remote prune origin && git branch -vv | grep '"'"': gone]'"'"' | awk '"'"'{print $1}'"'"' | xargs -r git branch -d'
참고 : config 명령 에서 실제 구성에서와 같이 대신에 -d
옵션을 사용합니다 . 병합되지 않은 분기에 대해 Git이 불평하는 것을 듣고 싶지 않기 때문에 사용 합니다. 이 기능도 원할 수 있습니다. 그렇다면 해당 구성 명령의 끝에 대신 사용 하십시오.git branch
-D
-D
-D
-d
Git Tip : Deleting Old Local Branches를 기반으로 합니다. jason.rickman의 솔루션 과 비슷합니다. 이 목적을 위해 Bash를 사용하여 git 이라는 사용자 지정 명령을 구현했습니다 .
$ git gone
usage: git gone [-pndD] [<branch>=origin]
OPTIONS
-p prune remote branch
-n dry run: list the gone branches
-d delete the gone branches
-D delete the gone branches forcefully
EXAMPLES
git gone -pn prune and dry run
git gone -d delete the gone branches
git gone -pn
가지 치기 및 "사라진"분기 나열을 결합합니다.
$ git gone -pn
bport/fix-server-broadcast b472d5d2b [origin/bport/fix-server-broadcast: gone] Bump modules
fport/rangepos 45c857d15 [origin/fport/rangepos: gone] Bump modules
그런 다음 사용 방아쇠를 당길 수 있습니다 git gone -d
또는 git gone -D
.
메모
- 내가 사용한 정규식 은 일반적으로
"$BRANCH/.*: gone]"
어디에$BRANCH
있습니다origin
. Git 출력이 프랑스어 등으로 지역화되어 있으면 작동하지 않을 것입니다. - Sebastian Wiesner는 또한 Windows 사용자를 위해 Rust로 포팅했습니다. 그 하나는 git gone 이라고도 합니다.
여기에 여러 가지 다른 답변을 많이 사용하여 UNIX와 유사한 셸에서 작동해야하는 다음과 같은 결과를 얻었습니다 (git 2.13 이상 만 해당).
git for-each-ref --shell --format='ref=%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)' refs/heads | while read entry; do eval "$entry"; [ ! -z "$ref" ] && git update-ref -d "$ref" && echo "deleted $ref"; done
이것은 ( 기계 처리가 아닌 사람이 읽을 수있는 출력을 위해 설계된 "도자기"명령 과 같이 ) for-each-ref
대신 사용하고 인수를 사용하여 적절하게 이스케이프 된 출력을 얻습니다 (이것은 우리가 참조 이름의 문자에 대해 걱정할 필요가 없도록합니다).branch
branch
--shell
이 bash 스크립트를 생각해 냈습니다. 그것은 항상 가지를 유지 develop
, qa
, master
.
git-clear() {
git pull -a > /dev/null
local branches=$(git branch --merged | grep -v 'develop' | grep -v 'master' | grep -v 'qa' | sed 's/^\s*//')
branches=(${branches//;/ })
if [ -z $branches ]; then
echo 'No branches to delete...'
return;
fi
echo $branches
echo 'Do you want to delete these merged branches? (y/n)'
read yn
case $yn in
[^Yy]* ) return;;
esac
echo 'Deleting...'
git remote prune origin
echo $branches | xargs git branch -d
git branch -vv
}
이것은 나를 위해 일했습니다.
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
git pull -p
-p를 pull과 함께 사용하면 삭제 된 모든 분기가 로컬에서 제거됩니다.
git 클라이언트를 사용하여 나를 위해 일한 간단한 대답은 다음과 같습니다.
컴퓨터에서 저장소를 모두 삭제 한 다음 다시 체크 아웃하십시오.
위험한 스크립트를 사용하지 마십시오.
얼마나 오래 걸릴지 모르겠지만 지금은 git-up을 사용합니다.
나는 git up
새로운 분기를 추적하기 시작하고 이전 분기를 삭제합니다.
명확히하기 위해 기본 git 명령이 아닙니다 — https://github.com/aanand/git-up
BTW 그것은 또한 더러운 나무를 숨기고 단지 git up
.
누군가에게 유용하기를 바랍니다.
Here's a solution that I use for the fish shell. Tested on Mac OS X 10.11.5
, fish 2.3.0
and git 2.8.3
.
function git_clean_branches
set base_branch develop
# work from our base branch
git checkout $base_branch
# remove local tracking branches where the remote branch is gone
git fetch -p
# find all local branches that have been merged into the base branch
# and delete any without a corresponding remote branch
set local
for f in (git branch --merged $base_branch | grep -v "\(master\|$base_branch\|\*\)" | awk '/\s*\w*\s*/ {print $1}')
set local $local $f
end
set remote
for f in (git branch -r | xargs basename)
set remote $remote $f
end
for f in $local
echo $remote | grep --quiet "\s$f\s"
if [ $status -gt 0 ]
git branch -d $f
end
end
end
A few notes:
Make sure to set the correct base_branch
. In this case I use develop
as the base branch, but it could be anything.
This part is very important: grep -v "\(master\|$base_branch\|\*\)"
. It ensures that you don't delete master or your base branch.
I use git branch -d <branch>
as an extra precaution, so as to not delete any branch that has not been fully merged with upstream or current HEAD.
An easy way to test is to replace git branch -d $f
with echo "will delete $f"
.
I suppose I should also add: USE AT YOUR OWN RISK!
I use a short method to do the trick, I recommend you to do the same as it could save some hours & give you more visibility
Just add the following snippet into your .bashrc (.bashprofile on macos).
git-cleaner() { git fetch --all --prune && git branch --merged | grep -v -E "\bmaster|preprod|dmz\b" | xargs -n 1 git branch -d ;};
- Fetch all remotes
- Get only merged branches from git
- Remove from this list the "protected / important" branches
- Remove the rest (e.g, clean and merged branches)
You'll have to edit the grep regex in order to fit to your needs (here, it prevent master, preprod and dmz from deletion)
I have written a Python script using GitPython to do delete local branches which don't exist on remote.
import git
import subprocess
from git.exc import GitCommandError
import os
def delete_merged_branches():
current_dir = input("Enter repository directory:")
repo = git.Repo(current_dir)
git_command = git.Git(current_dir)
# fetch the remote with prune, this will delete the remote references in local.
for remote in repo.remotes:
remote.fetch(prune=True)
local_branches = [branch.name for branch in repo.branches]
deleted_branches = []
# deleted_branches are the branches which are deleted on remote but exists on local.
for branch in local_branches:
try:
remote_name = 'origin/'+ branch
repo.git.checkout(remote_name)
except GitCommandError:
# if the remote reference is not present, it means the branch is deleted on remote.
deleted_branches.append(branch)
for branch in deleted_branches:
print("Deleting branch:"+branch)
git_command.execute(["git", "branch", "-D",branch])
# clean up the work flow.
repo.git.checkout('master')
repo.git.pull()
if __name__ == '__main__':
delete_merged_branches()
Hope someone finds it useful, please add comments if I missed anything.
This is gonna delete all the remote branches that are not present locally (in ruby):
bs = `git branch`.split; bs2 = `git branch -r | grep origin`.split.reject { |b| bs.include?(b.split('/')[1..-1].join('/')) }; bs2.each { |b| puts `git push origin --delete #{b.split('/')[1..-1].join('/')}` }
Explained:
# local branches
bs = `git branch`.split
# remote branches
bs2 = `git branch -r | grep origin`.split
# reject the branches that are present locally (removes origin/ in front)
bs2.reject! { |b| bs.include?(b.split('/')[1..-1].join('/')) }
# deletes the branches (removes origin/ in front)
bs2.each { |b| puts `git push origin --delete #{b.split('/')[1..-1].join('/')}` }
I use this method so I can have more control.
git branch -D $(git branch | grep -v "master" | grep -v "develop")
This is remove any branches not named: master
or develop
.
참고URL : https://stackoverflow.com/questions/7726949/remove-tracking-branches-no-longer-on-remote
'program tip' 카테고리의 다른 글
Docker 컨테이너의 셸에 어떻게 들어가나요? (0) | 2020.09.28 |
---|---|
jQuery 데이터 속성 값을 기반으로 요소를 찾는 방법은 무엇입니까? (0) | 2020.09.28 |
GitHub 저장소에서 단일 폴더 또는 디렉토리 다운로드 (0) | 2020.09.28 |
RecyclerView에 onItemClickListener ()가없는 이유는 무엇입니까? (0) | 2020.09.28 |
로컬 디렉터리에서 requirements.txt 파일에 따라 pip를 사용하여 패키지를 설치하는 방법은 무엇입니까? (0) | 2020.09.28 |