programing

이 맨 저장소로 푸시할 수 없는 이유는 무엇입니까?

elecom 2023. 5. 18. 20:44
반응형

이 맨 저장소로 푸시할 수 없는 이유는 무엇입니까?

이 워크플로우의 문제점을 설명해 주시겠습니까?

$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'

Doesn't.git push복제한 저장소에 항상 푸시하시겠습니까?

네, 문제는 "베어"에 커밋이 없다는 것입니다.이것은 순서(베어, 앨리스)로 리포지토리를 만드는 경우 첫 번째 커밋에서만 발생하는 문제입니다.시도:

git push --set-upstream origin master

이 작업은 처음에만 필요합니다.이후에는 정상적으로 작동해야 합니다.

Chris Johnsen이 지적했듯이, push.default가 사용자 지정된 경우에는 이 문제가 발생하지 않습니다.저는 업스트림/트래킹을 좋아합니다.

다음과 같은 경우:

 git push origin master

그것은 맨 레포까지 밀어붙일 것입니다.

앨리스 레포가 제대로 추적하지 않는 것 같습니다.

cat .git/config

기본 원격 및 분기가 표시됩니다.

네가 만약

 git push -u origin master

원격 및 지점 추적을 시작해야 합니다.저는 그 옵션이 항상 유효한지 확신할 수 없습니다.

이와 관련된 질문의 답은 나에게 해결책을 제공했습니다...그것은 그저 멍청한 실수였습니다.

먼저 약속하는 것을 기억하세요!

https://stackoverflow.com/a/7572252

아직 로컬 레포에 커밋하지 않았다면 푸시할 것이 없지만, 반환되는 Git 오류 메시지는 그다지 도움이 되지 않습니다.

git push --all

모든 것을 새 기본 저장소로 푸시하는 표준 방법입니다.

동일한 작업을 수행하는 또 다른 방법은 베어가 아닌 새 리포지토리를 만든 다음 이를 사용하여 베어 클론을 만드는 것입니다.

git clone --bare

그 다음에 사용

git remote add origin <new-remote-repo>

원본(비공유) 저장소에 있습니다.

이것을 사용해 보십시오.alice리포지토리(밀기 전):

git config push.default tracking

또는 사용자의 기본값으로 구성합니다.git config --global ….


git push기본값은 다음과 같습니다.origin리포지토리(일반적으로 현재 리포지토리를 복제한 리포지토리)는 현재 분기를 밀어넣지만 기본적으로 원본 리포지토리와 대상 리포지토리 모두에 있는 분기만 밀어넣습니다.

push.default구성 변수(git-config(1) 참조)는 다음을 제어합니다.git push"refspec" 인수(즉, 리포지토리 이름 뒤에 있는 인수)가 지정되지 않으면 푸시됩니다.기본값은 위에서 설명한 동작을 제공합니다.

다음은 가능한 값입니다.push.default:

  • nothing
    이렇게 하면 "refspec"을 제공해야 합니다.

  • matching(기본값)
    이렇게 하면 원본 리포지토리와 대상 리포지토리 모두에 있는 모든 분기가 푸시됩니다.
    이것은 현재 체크아웃된 분기와 완전히 독립적입니다.

  • upstream또는tracking
    (두 값 모두 동일한 의미입니다.후자는 "원격 추적" 분기와의 혼동을 피하기 위해 더 이상 사용되지 않습니다.는 1 1을 .
    이렇게 하면 현재 분기가 "업스트림" 구성으로 지정된 분기로 푸시됩니다.

  • current
    이렇게 하면 현재 분기가 대상 리포지토리의 동일한 이름의 분기로 푸시됩니다.

    이 마지막 두 가지는 일반적인 경우(예: 오리진/마스터를 업스트림으로 사용하는 로컬 마스터 작업)에는 동일하지만 로컬 분기가 "업스트림" 분기와 이름이 다를 경우에는 다릅니다.

    git checkout master
    # hack, commit, hack, commit
    
    # bug report comes in, we want a fix on master without the above commits
    
    git checkout -b quickfix origin/master  # "upstream" is master on origin
    # fix, commit
    git push
    

    와 함께push.default upstream(또는)tracking), 푸시는 다음으로 이동합니다.origin마스터 브랜치.다음과 같을 때current에게 압력이 가해질 것입니다.origin빠른 수정 분기.

matching하면 설이업트니다됩이데가 됩니다.bare일단 설정되면 시나리오의 마스터입니다.그것을 확립하기 위해, 당신은git push origin master한번만.

하만지그, 그.upstream 아마도 또아설마도정는▁settingcurrent더잘도 있을 것 , 은 그것을해 보는 것이 것입니다.

# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push

# configure it for only this repository
git config push.default upstream

# configure it for all repositories that do not override it themselves
git config --global push.default upstream

말하지만, 1, (시말하만지다여경이, 1.7.4.2 를전버전사중,trackingupstream).

SourceTree git 클라이언트를 사용하는데 초기 commit/push 명령어는 다음과 같습니다.

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master

언급URL : https://stackoverflow.com/questions/6157730/why-cant-i-push-to-this-bare-repository

반응형