2016-10-06 2 views
0

기존의 SVN 저장소 (트렁크 만)를 10000 개 이상 커밋하여 호스트 된 Git 솔루션 (내 경우 BitBucket)으로 마이그레이션하는 중입니다.git push에서 최대 커밋 수를 설정하는 방법

SVN repo를 로컬 Git으로 변환해도 아무런 문제가 없지만 모든 리비전을 온라인에서 빈 Git Repo로 푸시하려고합니다.

그러나 TortoiseGit에서 푸시를하고는,이 출력 중지 :

git.exe push -v --progress "origin" master 

Counting objects: 198817, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (83858/83858), done. 
POST git-receive-pack (chunked) 
Writing objects: 100% (198817/198817), 1.54 GiB | 460.00 KiB/s, done. 
Total 198817 (delta 130510), reused 178506 (delta 112822) 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 
error: RPC failed; curl 52 Empty reply from server 
Pushing to https://[email protected]/__removed__/__removed__.git 
Everything up-to-date 


git did not exit cleanly (exit code 1) (3644609 ms @ 06.10.2016 11:16:23) 

나는 내 문제에 대한 유일한 해결책은 한 번에 1000 커밋을 밀어 아니라 생각합니다. 하지만 이미 서버에없는 처음 1000 개의 커밋을 어떻게 제한 할 수 있습니까?

푸시 할 각 커밋을 지정하고 싶지 않습니다 (예 : this question answered). 나는 단지 최대 카운트를 설정하기를 원할 뿐이다.

+0

가 _ "나는 내 문제에 대한 유일한 해결책은 1000 밀어하는 것입니다 한 번에 커밋 생각한다"_ - 왜 그렇게 생각? – 1615903

+0

내 푸시가 너무 크다고 생각합니다. 작은 조각으로 버퍼링하려고합니다. –

+2

그게 문제인지는 모르겠지만 테스트하기 쉽습니다. 'master'에 대한 긴 커밋의 시작 부분 근처에서 커밋을 선택하고 수동으로 밀어 넣으십시오. 조상은 커밋한다.)'git push : master'. 어떻게 짜증나는 GUI (성가신 커맨드 라인 대 :-)에서 그것을하는 방법, 나는 전혀 모른다. – torek

답변

0

my answer to "Git error: RPC failed; result=22, HTTP code = 404"에서 수동으로 수행하는 방법을 설명했습니다. (그 대답은 커다란 커밋 하나에 붙어 있다면 어떻게해야하는지에 대해서도 설명합니다.)

내가 그 대답과 코멘트에서 언급했듯이 가능한 한 HTTPS에서 SSH로 전환하는 것이 좋습니다. 이런 종류의 문제는 SSH로 푸시하는 것과 관련됩니다. 그것은 HTTPS로 제한되는 것으로 보인다.

그러나 HTTPS를 사용하는 경우 한 번에 작은 커밋 하위 집합을 푸시해야합니다. 귀하의 질문에 요청으로, 여기에 (내가 함께 던져 스크립트의 형태로) 프로세스를 자동화하는 방법 : I가이 테스트가 편리한 REPO/서버가없는

#!/bin/bash 
# Bisect a git push to get around HTTP POST size limits. 

branch=$1 
commits=$(git log --oneline | wc -l) 
current=$commits 

while [ $(git rev-parse origin/$branch 2>/dev/null) != $(git rev-parse $branch) ] 
do 
    # Git push command counts backwards, so invert the counter. 
    inverse=$(expr $commits - $current) 
    git push origin $branch~$inverse:$branch 

    if [ $? -ne 0 ] 
    then 
    # If failed, bisect further, if possible. 
    if [ $current > 1] 
    then 
     current=$(expr $current/2) 
    else 
     echo "Error, could not push single commit." 
     exit 1 
    fi 
    else 
    # If successful, reset bisect. 
    current=$commits 
    fi 
done 

는하지만, 적어도 당신을 시작해야합니다.

이것은 커밋을 특정 숫자로 제한하지 않지만 한 번에 성공적으로 커밋 수를 계산할 수있는 이진 검색을 수행합니다. 완성도를 들어

는, 여기 한 번에 커밋의 특정 숫자를 밀어 스크립트입니다 :

#!/bin/bash 
# Push commits in smaller batches. 

branch=$1 
atonce=$2 
commits=$(git log --oneline | wc -l) 
current=$atonce 

while [ $(git rev-parse origin/$branch 2>/dev/null) != $(git rev-parse $branch) ] 
do 
    # Git push command counts backwards, so invert the counter. 
    inverse=$(expr $commits - $current) 
    git push origin $branch~$inverse:$branch 

    if [ $? -ne 0 ] 
    then 
    echo "Error, could not push $atonce commits." 
    exit 1 
    else 
    current=$(expr $commits + $atonce) 
    fi 
done 
관련 문제