git remote prune, git prune, git fetch --prune 등의 차이점은 무엇입니까?
내 상황은...같은 레포에서 일하는 누군가가 그의 로컬 레포와 원격 레포에서 지점을 삭제했습니다.
Overflow 한 대부분의 목록에 .git branch -a
래아맨:
* master
develop
feature_blah
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
remotes/origin/random_branch_I_want_deleted
그러나 내 상황에서 있어서는 안 되는 지점은 로컬입니다.
* master
develop
feature_blah
random_branch_I_want_deleted
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
다음 중 하나를 수행해도 로컬로 제거되지 않습니다.
$ git prune
저도 해봤어요.
$ git remote prune origin
$ git fetch --prune
한 정보: 유용한정보더 : 확인할 때 확인시git remote show origin
다음과 같이 표시됩니다.
* remote origin
Fetch URL: utilities:homeconnections_ui.git
Push URL: utilities:homeconnections_ui.git
HEAD branch: master
Remote branches:
master tracked
develop tracked
feature_blah tracked
other123 tracked
other444 tracked
other999 tracked
Local branches configured for 'git pull':
develop merges with remote develop
feature_blah merges with remote other999
master merges with remote master
random_branch_I_want_deleted merges with remote random_branch_I_want_deleted
Local refs configured for 'git push':
develop pushes to develop (local out of date)
master pushes to master (up to date)
feature_blah pushes to feature_blah(up to date)
은 " 제목섹만있다니습에션▁titled" 섹션에만 .Local branches configured for 'git pull':
왜요?
저는 당신이 이것에 대해 좌절하는 것을 비난하지 않습니다.가장 좋은 방법은 이것입니다.모든 원격 분기에는 다음과 같은 세 가지 버전이 있습니다.
- 입니다.
(예: 원격 repo(https://example.com/repo.git, )refs/heads/master
) - ("" 해당아스샷냅로저됨장"(" "래에분의컬기") 됨)
refs/remotes/...
)
repo, (예: 자담예지현당,담자,refs/remotes/origin/master
) - 할 수 입니다.
repo, (예: 자담예지현당,담자,refs/heads/master
)
먼저부터 git prune
그러면 더 이상 참조되지 않는 개체가 제거되고 참조가 제거되지 않습니다.당신의 경우, 당신은 지역 지점을 가지고 있습니다.그 말은 심판의 이름이random_branch_I_want_deleted
이는 해당 분기의 기록을 나타내는 일부 개체를 나타냅니다.으로는 그서따, 정에르면의래,git prune
를 제거하지 .random_branch_I_want_deleted
. . . . . . . . . . . . . . . ..git prune
Git에 축적되었지만 어떤 것도 참조하지 않는 데이터를 삭제하는 방법입니다.일반적으로 분기에 대한 뷰에는 영향을 주지 않습니다.
git remote prune origin
그리고.git fetch --prune
다 둘다 아래참작니다동합서조에에 있는 합니다.refs/remotes/...
(이를 원격 참조라고 합니다.)지역 지점에는 영향을 미치지 않습니다. 그git remote
버전은 특정 원격에서 원격 참조만 제거하려는 경우에 유용합니다.그렇지 않으면, 둘은 정확히 같은 일을 합니다.그래서, 간단히 말해서,git remote prune
그리고.git fetch --prune
위의 2번에서 작동합니다.웹이상 ("git " GUI"라는 이름으로 표시).git branch -r
이 .), 를 참조하십시오.
분기를 하려면 로컬분제면다사합용니다야해음을을 .git branch -d
(또는)-D
어디에도 병합되지 않는 경우).FWIW, 원격 분기가 사라질 경우 로컬 추적 분기를 자동으로 제거하는 git 명령이 없습니다.
git remote prune
그리고.git fetch --prune
동일한 작업을 수행하십시오. 원격에 존재하지 않는 지점에 대한 참조를 삭제하십시오.두 번째 명령은 원격에 연결하고 가지치기 전에 현재 분기를 가져옵니다.
그러나 체크아웃한 로컬 지점에는 영향을 주지 않으므로, 간단히 삭제할 수 있습니다.
git branch -d random_branch_I_want_deleted
를 바꿉니다.-d
타고-D
지점이 다른 곳에 병합되지 않은 경우
git prune
분기 또는 태그에서 연결할 수 없는 커밋을 제거하여 더 이상 필요하지 않은 다른 개체를 제거합니다.
누구나 관심을 가질 수 있는 경우.다음은 원격으로 추적되지 않는 모든 로컬 분기를 제거하는 빠른 셸 스크립트입니다.주의 사항:이렇게 하면 병합 여부에 관계없이 원격으로 추적되지 않는 모든 분기가 제거됩니다.
문제가 있으면 알려주시면 제가 수정하겠습니다(등).
다음파일저다라는 에 합니다.git-rm-ntb
PATH
실행:
git-rm-ntb <remote1:optional> <remote2:optional> ...
clean()
{
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
RBRANCHES=()
while read REMOTE; do
CURRBRANCHES=($(git ls-remote $REMOTE | awk '{print $2}' | grep 'refs/heads/' | sed 's:refs/heads/::'))
RBRANCHES=("${CURRBRANCHES[@]}" "${RBRANCHES[@]}")
done < <(echo "$REMOTES" )
[[ $RBRANCHES ]] || exit
LBRANCHES=($(git branch | sed 's:\*::' | awk '{print $1}'))
for i in "${LBRANCHES[@]}"; do
skip=
for j in "${RBRANCHES[@]}"; do
[[ $i == $j ]] && { skip=1; echo -e "\033[32m Keeping $i \033[0m"; break; }
done
[[ -n $skip ]] || { echo -e "\033[31m $(git branch -D $i) \033[0m"; }
done
}
clean $@
사이의 한 가지 차이점에 주목하십시오.git remote --prune
그리고.git fetch --prune
Tom Miller()tmiller
에 의해 커밋 10a6cc8로 수정됨(1.9/2.0, 2014년 1분기):
추적 "" 는라 원지있때을이점적격추때▁""▁named"일 때.
frotz/nitfol
이전의 fetch에서, 그리고 업스트림에는 이제 "frotz"라는 이름의 분기가 있습니다.fetch
"를 제거하지 못합니다.frotz/nitfol
a하▁"".git fetch --prune
상류로부터
"git는사에를게자알것록려입줄다니도하사용용▁"를것▁the다▁g입g"를 사용하도록 알려줍니다.git remote prune
문제를 해결하기 위해.
따라서, 업스트림 레포에 분기 계층 구조와 같은 이름의 분기("frotz/xxx")가 있을 때,git remote --prune
성공했습니다(리포에서 원격 추적 지점 정리).git fetch --prune
실패하고 있었습니다.
더 이상 없음:
법변경방변" 합니다.
fetch --prune
가져오기 작업 전에 가지치기 작업을 이동하여 작동합니다.
이렇게 하면 사용자에게 충돌을 경고하는 대신 자동으로 해결됩니다.
또 다른 차이점:
Git 2.39(git prune
(man)Q4 2022)를 사용하면 ""를 반복할 수 있습니다..git/objects/pack
삭제할 휴지통 파일의 경우 디렉터리가 없으면 큰 소리로 실패합니다.
명령은 이러한 실패를 무시하도록 학습되었습니다.
동안에하는 동안에git fetch --prune
큰 합니다.
에릭 ele828
웡()의 커밋 6974765(2022년 11월 19일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 2022년 11월 28일 7d7ed48 커밋)
prune
누락된 디렉터리에 대한 조용한 ENONT사인 오프 바이: 에릭 웡
$GIT_DIR/objects/pack
공유 저장소에 inode를 저장하기 위해 제거할 수 있습니다.
은 quiet down prune 중 일 경우$GIT_DIR/objects
또는$GIT_DIR/objects/pack
는 존재하지 않지만 다른 경우에는 사용자가 권한 문제나 리소스 제약 조건을 진단하는 데 도움이 되도록 시스템 오류를 내보냅니다.
그래서, "디렉토리를 열 수 없습니다..."는 다음과 같은 경우 git prune을 수행할 수 없습니다.$GIT_DIR/objects
또는$GIT_DIR/objects/pack
누락되었습니다.
언급URL : https://stackoverflow.com/questions/20106712/what-are-the-differences-between-git-remote-prune-git-prune-git-fetch-prune
'programing' 카테고리의 다른 글
이 Windows 배치 파일의 첫 번째 줄만 실행되고 세 줄 모두 명령 셸에서 실행되는 이유는 무엇입니까? (0) | 2023.05.06 |
---|---|
Git 개인 액세스 토큰은 어디에 저장합니까? (0) | 2023.05.06 |
유휴 Postgre에 대한 시간 초과가 있습니까?SQL 연결? (0) | 2023.05.01 |
잠금 명령문 본문에서 '대기' 연산자를 사용할 수 없는 이유는 무엇입니까? (0) | 2023.05.01 |
프로비저닝 프로파일을 새로 고칠 때 Xcode가 충돌합니다. (0) | 2023.05.01 |