이 베어 리포지토리로 푸시 할 수없는 이유는 무엇입니까?


283

이 워크 플로우의 문제점을 설명 할 수 있습니까?

$ 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'

git push내가 복제 한 저장소로 항상 푸시 하지는 않습니까?


푸시 할 분기를 지정하지 않아야합니까?
Rekin

3
클론 후가 아닙니다 !!! 문제가 해결 된 후에는 훌륭하게 작동하며 분기를 지정할 필요가 없습니다 ... 빈 저장소의 첫 번째 체크 아웃 에서이 문제가 발생합니다. 매우 성가신 것입니다 ...이 문제를 해결해야합니다.
Dean Hiller

전술을 수행하려고 할 때이 글이 누군가에게 도움이 될 것입니다 희망 samranga.blogspot.com/2015/07/... 자식의 Bitbucket 저장소가 이미 로컬 기존 프로젝트에서 만들려고하는 경우에도 문제의 오류가 튀어 될 수있다
SAMITHA을 Chathuranga

답변:


483

예, 문제는 "베어"에 커밋이 없다는 것입니다. 이것은 순서대로 저장소를 작성하는 경우 (첫 번째, 앨리스) 첫 번째 커밋에서만 발생하는 문제입니다. 시도해보십시오 :

git push --set-upstream origin master

이것은 처음에만 필요합니다. 나중에 정상적으로 작동합니다.

Chris Johnsen이 지적했듯이 push.default가 사용자 정의되어 있으면이 문제가 발생하지 않습니다. 나는 상류 / 추적을 좋아한다.


1
나는하고 sudo apt-get upgrade git-core있으며 sudo apt-get upgrade git업데이트가 필요하지 않다고 생각합니다. git --version1.7.3.1을 반환합니다. 무엇이 빠졌는지 아십니까? 나는 현재 apt-get update나를 위해 작동하지 않는다는 것을 인정 하지만, 그리 오래되지 않았습니다.
ripper234

1
@ ripper234 : 현재 버전의 git은 1.7.5.3입니다. 불편을 겪고 있거나 다른 워크 플로우를 사용하거나 debian / ubuntu 패키지없이 최신 git을 수동으로 설치할 수 있습니다.
세스 로버트슨

아 맞다, 나는 소프트웨어가 패키지되기 전에 시간이 걸린다는 것을 잊었다. 저는 Windows에서 온 Linux 멍청한 놈이며 클릭하여 최신 버전을 설치하는 데 사용했습니다.
ripper234

9
“최근 버전에는이 문제가 없습니다”에 관하여 : 최근 버전에서도 푸시의 기본값은 다음과 같지 않습니다 matching. 어쩌면 당신은 / (또는 )로 push.default설정 했습니까? upstreamtrackingcurrent~/.gitconfig
Chris Johnsen

4
git push origin master:master명시 적으로 만들어 보십시오 . 그래도 문제가 해결되지 않으면 어떤 분기에 있는지 확인하십시오. git branch아마도 첫 번째 커밋을하지 않았거나 마스터 이외의 분기에서 해당 커밋을 한 것입니다.
세스 로버트슨

43

만약 너라면:

 git push origin master

맨손으로 리포 지합니다.

Alice Repo가 올바르게 추적하지 않는 것 같습니다.

cat .git/config

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

만약 너라면

 git push -u origin master

원격 및 지점 추적을 시작해야합니다. 해당 옵션이 항상 자식인지 확실하지 않습니다.


30

이 관련 질문에 대한 답변은 저에게 해결책을 제공했습니다 ... 그것은 단지 멍청한 실수였습니다.

먼저 커밋하십시오!

https://stackoverflow.com/a/7572252

아직 로컬 리포지토리에 커밋하지 않은 경우 푸시 할 내용이 없지만 Git 오류 메시지가 도움이되지 않습니다.


17
git push --all

모든 것을 새로운 베어 리포지토리로 푸시하는 정식 방법입니다.

동일한 작업을 수행하는 또 다른 방법은 새로운 비 저장 리포지토리를 만든 다음 다음과 같이 베어 클론을 만드는 것입니다.

git clone --bare

그런 다음 사용

git remote add origin <new-remote-repo>

원래 (비 베어) 저장소에.


... 답을 공감 했습니까? 그것은 이다 새로운 베어 저장소에 모든 것을 밀어 표준 방법입니다. 그래도 문제가 해결되지 않으면 다른 문제가 있습니다.
ebneter

네 말이 맞아, 아마 안되었을거야 편집하면 다운 보트를 취소합니다.
ripper234

감사합니다, 같은 작업을 수행하기 위해 다른 방법으로 편집했습니다.
ebneter

귀하의 답변은 저에게 감사를주었습니다;) 그러나 명령이 끝날 때 경로는 다음과 같이 표시되어야합니다 git push --all ../test_repo. 명령 끝에 repo의 URL;)
Metafaniel

@Metafaniel 설정 방법에 따라 다릅니다. 로컬 리포지토리에 리모컨이 이미 올바르게 구성된 경우 "git push --all"이 그대로 작동합니다.
ebneter

7

alice밀어 넣기 전에 저장소 에서 이것을 시도하십시오 .

git config push.default tracking

또는을 사용하여 사용자의 기본값으로 구성하십시오 git config --global ….


git push기본적으로 origin리포지토리 (일반적으로 현재 리포지토리를 복제 한 리포지토리)로 설정되지만 기본적으로 현재 분기를 푸시하지는 않습니다. 기본적으로 소스 리포지토리와 대상 리포지토리 모두에있는 분기 만 푸시합니다.

push.default구성 변수 (참조 자식-설정을 (1) ) 어떤 컨트롤 git push이 (저장소 이름 뒤에 즉, 무언가를) 어떤 "refspec"인자가되지 않을 때 밀어 것입니다. 기본값은 위에서 설명한 동작을 제공합니다.

가능한 값은 다음과 같습니다 push.default.

  • nothing
    이렇게하면“refspec”이 제공됩니다.

  • matching(기본값) 소스 리포지토리와 대상 리포지토리에 모두 존재하는 모든 분기를
    푸시 합니다. 이것은 현재 체크 아웃 된 브랜치와 완전히 독립적입니다.

  • upstream또는 tracking
    (두 값 모두 같은 의미입니다. 후자는 "원격 추적"분기와 혼동을 피하기 위해 더 이상 사용되지 않습니다. 전자는 1.7.4.2에 도입되었으므로 Git 1.7.3.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'의 quickfix 지점.

matching설정이 업데이트됩니다 bare마스터 가 설립 된 후 시나리오에서. 그것을 설정하기 위해 git push origin master한 번 사용할 수 있습니다 .

그러나 upstream설정 (또는 current)은 예상 한 결과와 더 잘 일치하는 것처럼 보이므로 시도해 볼 수 있습니다.

# 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.7.4.2 이전에 여전히 Git을 사용하고 있다면 tracking대신 에을 사용해야 합니다 upstream.)


1

SourceTree git client를 사용 하는데 초기 commit / push 명령은 다음과 같습니다.

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.