Git/Repo 장면 기술 적용
1. 코드를 특정 시점으로 되돌리기
배경: 프로젝트 코드가 개발 과정에서 문제가 생겼을 때 어느 시간의 코드에 문제가 발생하지 않았음을 똑똑히 기억한다.그래서 코드를 이 시간 노드 앞으로 되돌려 놓으려고 합니다.
다음 명령을 사용할 수 있습니다.repo forall -c 'commitID=`git log --before "yyyy-mm-dd hh:mm" -1 --pretty=format:"%H"`; git reset --hard $commitID'
2. 패치 시 충돌 해결
배경: 패치 과정에서 충돌이 발생하면 다음과 같은 방법으로 충돌을 해결할 수 있습니다.git am xxxxx.patch //Error because of conflict
git apply --reject xxxxx.patch //then files not conflict in this commit will merge into local
git status//find which files is modified
//fix the conflicts
git add -u
git am --resolved xxxx.patch
3. 에이전트를 이용하여git창고 다운로드
배경: 외국 코드를 다운로드할 때 다운로드가 움직이지 않을 때, 예를 들어 안드로이드 시스템 원본은 프록시를 통해 다운로드할 수 있다.git config --global http.proxy 'socks5://127.0.0.1:1080'
4.git 색상 설정
배경:git diff를 사용할 때 코드의 모양이 같아서 구분하기 어려울 때:git config --global color.ui auto
5.gerrit 코드를 업로드하기
배경: 오래된 서버의 코드를gerrit 서버의 코드에 제출하고 새 지점만 만들어서 오래된 서버의 지점과 일치합니다
repo forall -c 'commitID=`git log --before "yyyy-mm-dd hh:mm" -1 --pretty=format:"%H"`; git reset --hard $commitID'
배경: 패치 과정에서 충돌이 발생하면 다음과 같은 방법으로 충돌을 해결할 수 있습니다.
git am xxxxx.patch //Error because of conflict
git apply --reject xxxxx.patch //then files not conflict in this commit will merge into local
git status//find which files is modified
//fix the conflicts
git add -u
git am --resolved xxxx.patch
3. 에이전트를 이용하여git창고 다운로드
배경: 외국 코드를 다운로드할 때 다운로드가 움직이지 않을 때, 예를 들어 안드로이드 시스템 원본은 프록시를 통해 다운로드할 수 있다.git config --global http.proxy 'socks5://127.0.0.1:1080'
4.git 색상 설정
배경:git diff를 사용할 때 코드의 모양이 같아서 구분하기 어려울 때:git config --global color.ui auto
5.gerrit 코드를 업로드하기
배경: 오래된 서버의 코드를gerrit 서버의 코드에 제출하고 새 지점만 만들어서 오래된 서버의 지점과 일치합니다
git config --global http.proxy 'socks5://127.0.0.1:1080'
배경:git diff를 사용할 때 코드의 모양이 같아서 구분하기 어려울 때:
git config --global color.ui auto
5.gerrit 코드를 업로드하기
배경: 오래된 서버의 코드를gerrit 서버의 코드에 제출하고 새 지점만 만들어서 오래된 서버의 지점과 일치합니다
.repo/repo/subcmds/forall.py
파일, 변수REPO_PROJECT
에 대응하는 창고 이름이 있습니다. 접두사만 수정하면 됩니다. 여기에 새로운 변수REPO_TEST
를 만듭니다. ssh를 사용해야 합니다. 그렇지 않으면 창고마다 비밀번호가 필요합니다repo forall -c 'git remote add [ ] $REPO_TEST'
repo forall -c 'git push [ ] [ ]:[ ]'
6. 지정된 commit의 내용 수정 #!/bin/bash
change-commit-msg(){
commit="$1"
newmsg="$2"
branch="master"
git checkout $commit
git commit --amend -m "$newmsg"
git cherry-pick $commit..$branch
git branch -f $branch
git checkout $branch
}
7. Git 여러 제출 병합 git rebase -i HEAD~2
프롬프트는 다음과 같습니다.pick c6e4557 create second.txt
pick e1a7dfa add text in second.txt
# Rebase a71eba2..e1a7dfa onto a71eba2
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
첫 번째 열은 rebase에서 수행되는 작업입니다. 여기서 작업을 선택할 수 있습니다. 여기서 의미는 다음과 같습니다.
#!/bin/bash
change-commit-msg(){
commit="$1"
newmsg="$2"
branch="master"
git checkout $commit
git commit --amend -m "$newmsg"
git cherry-pick $commit..$branch
git branch -f $branch
git checkout $branch
}
git rebase -i HEAD~2
프롬프트는 다음과 같습니다.
pick c6e4557 create second.txt
pick e1a7dfa add text in second.txt
# Rebase a71eba2..e1a7dfa onto a71eba2
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
첫 번째 열은 rebase에서 수행되는 작업입니다. 여기서 작업을 선택할 수 있습니다. 여기서 의미는 다음과 같습니다.
두 번째 pick을 squash 또는 s로 바꾸고 종료를 저장합니다.다음과 같습니다.
pick c6e4557 create second.txt
s e1a7dfa add text in second.txt
이때git는 자동으로 두 번째 제출을 첫 번째 제출에 통합하고 다음과 같은 통합 알림 정보를 팝업합니다.
# This is a combination of 2 commits.
# The first commit's message is:
create second.txt
# This is the 2nd commit message:
add text in second.txt
# 。 '#' ,
# 。
#
# : Mon Nov 28 13:59:43 2016 +0800
#
# ; a71eba2
# 'master' 'a71eba2' 。
#
# :
# : second.txt
#
정보를 수정하여 제출해야 할 경우 종료를 직접 저장하지 않아도 됩니다.
제출 순서를 바꿔야 할 때도 상기 방법을 통해 실현할 수 있다.
8. ssh 원격 주소 스크립트 추가 str=`git remote -v | head -n 1 | awk -F ' ' '{print $2}'`
prefix="http://gerrit.xxxxxxx.com:[ ]/" #
suffix=${str#$prefix} #
gerritprefix="ssh://[email protected]:[ ]/" # ssh
git remote add gerrit $gerritprefix$suffix
echo "add remote address succeed"
9. 원격 tag 및 분기 만들기
str=`git remote -v | head -n 1 | awk -F ' ' '{print $2}'`
prefix="http://gerrit.xxxxxxx.com:[ ]/" #
suffix=${str#$prefix} #
gerritprefix="ssh://[email protected]:[ ]/" # ssh
git remote add gerrit $gerritprefix$suffix
echo "add remote address succeed"
$ repo forall -c 'git remote add [remote address name] ssh://[username]@xxxx/$REPO_PROJECT' --no-verify
$ repo forall -c 'git tag -a "[tag name]" -m "[comment]"'
$ repo forall -c 'git push [remote address name] [tag name]'
$ repo forall -c 'git branch [new branch name] [tag name]'
$ repo forall -c git checkout [tag name]
또는
$ repo forall -c 'git checkout -b [new branch name] [tag name]'
$ repo forall -c 'git push [remote address name] [new branch name]'
10 코드 업로드 시 "expected old/new/ref" 프롬프트
배경: 서버에 코드를 업로드할 때 다음과 같은 프롬프트가 표시됩니다. protocol error: expected old/new/ref
다음 명령을 사용하여 해결할 수 있습니다.$ git fetch [remote address] --unshallow
11. 창고 지점 이름 수정
11.1 비현재 브랜치 이름 수정
git branch -m [old name] [new name]
11.2 현재 분기 이름 수정
git branch -m [new name]
12. 원격 서버를 강력하게 확장
때때로 서버에 코드를 밀어붙일 때fast-forward에 대한 질문을 할 수 있으며 서버 코드를 수정하여 강제로 밀어붙일 수 있습니다.창고 수정 xx.git/config 파일, 다음 필드를false로 수정[receive]
denyNonFastforwards = false
이때git push-f를 통해 코드를 강제로 전송할 수 있습니다.로컬 분기를 원격 서버의 분기로 강제로 밀어야 하는 경우 다음 명령을 사용할 수 있습니다.$ git push -f [remote] [ ]:[ ]
13. dst refspec matches more than one
원격 서버 spoke를 수정해야 할 때 다음과 같은 프롬프트가 표시되는 경우가 있습니다.dst refspec matches more than one
이러한 힌트는 태그 이름과 브랜치 이름이 같아 목적 주소가 모호해질 가능성이 높다.
이때 원격 지점을 먼저 삭제한 다음에 로컬 지점을 다시 끌어올릴 수 있다.다음과 같이 원격 분기를 삭제합니다.$ git push [remote] :refs/heads/[remote branch]
'refs/heads'를 추가하지 않으면 matches more than one의 프롬프트가 나타납니다.$ git push [remote] :[remote branch]
나중에 지점을 원격 지점에 업로드할 때도 다음과 같은 방법이 필요합니다.$ git push -f origin [remote]:refs/heads/[remote branch]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[TIL] repo sync - curl 404 Not found
서버에 업로드 되어있는 Android Project 소스를 로컬로 가져오기 위해 repo init 이후 repo sync를 하는데 아래와 같은 로그가 나왔다.
404 에러는 서버는 있지만 요청한 사항을 찾을 수 없을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
protocol error: expected old/new/ref
$ git fetch [remote address] --unshallow
11.1 비현재 브랜치 이름 수정
git branch -m [old name] [new name]
11.2 현재 분기 이름 수정
git branch -m [new name]
12. 원격 서버를 강력하게 확장
때때로 서버에 코드를 밀어붙일 때fast-forward에 대한 질문을 할 수 있으며 서버 코드를 수정하여 강제로 밀어붙일 수 있습니다.창고 수정 xx.git/config 파일, 다음 필드를false로 수정[receive]
denyNonFastforwards = false
이때git push-f를 통해 코드를 강제로 전송할 수 있습니다.로컬 분기를 원격 서버의 분기로 강제로 밀어야 하는 경우 다음 명령을 사용할 수 있습니다.$ git push -f [remote] [ ]:[ ]
13. dst refspec matches more than one
원격 서버 spoke를 수정해야 할 때 다음과 같은 프롬프트가 표시되는 경우가 있습니다.dst refspec matches more than one
이러한 힌트는 태그 이름과 브랜치 이름이 같아 목적 주소가 모호해질 가능성이 높다.
이때 원격 지점을 먼저 삭제한 다음에 로컬 지점을 다시 끌어올릴 수 있다.다음과 같이 원격 분기를 삭제합니다.$ git push [remote] :refs/heads/[remote branch]
'refs/heads'를 추가하지 않으면 matches more than one의 프롬프트가 나타납니다.$ git push [remote] :[remote branch]
나중에 지점을 원격 지점에 업로드할 때도 다음과 같은 방법이 필요합니다.$ git push -f origin [remote]:refs/heads/[remote branch]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[TIL] repo sync - curl 404 Not found
서버에 업로드 되어있는 Android Project 소스를 로컬로 가져오기 위해 repo init 이후 repo sync를 하는데 아래와 같은 로그가 나왔다.
404 에러는 서버는 있지만 요청한 사항을 찾을 수 없을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
[receive]
denyNonFastforwards = false
$ git push -f [remote] [ ]:[ ]
원격 서버 spoke를 수정해야 할 때 다음과 같은 프롬프트가 표시되는 경우가 있습니다.
dst refspec matches more than one
이러한 힌트는 태그 이름과 브랜치 이름이 같아 목적 주소가 모호해질 가능성이 높다.
이때 원격 지점을 먼저 삭제한 다음에 로컬 지점을 다시 끌어올릴 수 있다.다음과 같이 원격 분기를 삭제합니다.
$ git push [remote] :refs/heads/[remote branch]
'refs/heads'를 추가하지 않으면 matches more than one의 프롬프트가 나타납니다.
$ git push [remote] :[remote branch]
나중에 지점을 원격 지점에 업로드할 때도 다음과 같은 방법이 필요합니다.
$ git push -f origin [remote]:refs/heads/[remote branch]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[TIL] repo sync - curl 404 Not found서버에 업로드 되어있는 Android Project 소스를 로컬로 가져오기 위해 repo init 이후 repo sync를 하는데 아래와 같은 로그가 나왔다. 404 에러는 서버는 있지만 요청한 사항을 찾을 수 없을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.