GitHub에서 refs에서 찾을 수 없는 약속이 사라졌는지 여부

3133 단어 GitGitHub

총결산


비밀번호 등 파일을 제출할 때 처리에서'git rm는 안 되고git filter-branch는 사용한다'는 보도를 여러 번 보았다.내가 알고 싶은 사람은 알지만 보충은 한다.
  • gitrm진행commit도 이력서에 남는다
  • git filter-branch는 로컬refs 추적 역사에서 삭제할 수 있습니다
  • 로컬 데이터 라이브러리에commit이 남아 있기 때문에reflog에서 돌아올 수 있습니다
  • push면forcepush도 원격 자료 라이브러리에 남을 거예요.
  • forcepush 이전에 다른 사람이fetch가 없어도 꺼낼 수 있습니다
  • 안전성 측면에서 볼 때 나는 마지막이 마음에 들어서 원격으로 GitHub를 위한 실험을 한다.

    준비


    암호가 포함된 파일 밀어넣기

    $ echo "secret password" > password.txt
    $ git add password.txt
    $ git commit -m "add password.txt"
    [master 661598e] add password.txt
     1 file changed, 1 insertion(+)
     create mode 100644 password.txt
    $ git rev-parse HEAD
    661598e05d5e5faef7c1fc75a4f3c5a2c88368a1
    $ git push origin master
    Enumerating objects: 4, done.
    Counting objects: 100% (4/4), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 305 bytes | 305.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To github.com:yoichi/test_fetch_sha1.git
       43fe66d..661598e  master -> master
    

    filter-branch force-push

    $ git filter-branch --tree-filter "rm -f password.txt"
    Rewrite 661598e05d5e5faef7c1fc75a4f3c5a2c88368a1 (2/2) (0 seconds passed, remaining 0 predicted)
    Ref 'refs/heads/master' was rewritten
    $ git push origin master --force
    Enumerating objects: 1, done.
    Counting objects: 100% (1/1), done.
    Writing objects: 100% (1/1), 196 bytes | 196.00 KiB/s, done.
    Total 1 (delta 0), reused 0 (delta 0)
    To github.com:yoichi/test_fetch_sha1.git
     + 661598e...7568dd0 master -> master (forced update)
    

    다시 clone checkout


    다시 클론을 만들 때refs에서 추적할 수 없는 제출을 가져오지 않습니다.하지만 이는 원격으로 사라지는 근거가 될 수 없다.
    $ git clone [email protected]:yoichi/test_fetch_sha1.git
    Cloning into 'test_fetch_sha1'...
    remote: Enumerating objects: 4, done.
    remote: Counting objects: 100% (4/4), done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 4 (delta 1), reused 3 (delta 0), pack-reused 0
    Receiving objects: 100% (4/4), done.
    Resolving deltas: 100% (1/1), done.
    $ git checkout 661598e05d5e5faef7c1fc75a4f3c5a2c88368a1
    fatal: reference is not a tree: 661598e05d5e5faef7c1fc75a4f3c5a2c88368a1
    

    fetch sha1


    git fetch에서 SHA1의 값을 주더라도 팝업됩니다.하지만 이는 원격으로 사라지는 근거가 될 수 없다.
    $ git fetch origin 661598e05d5e5faef7c1fc75a4f3c5a2c88368a1
    error: Server does not allow request for unadvertised object 661598e05d5e5faef7c1fc75a4f3c5a2c88368a1
    

    GitHub의 commit 페이지 열기


    아, 봤어.

    그럼 나 어떡하지?


    이력서에서 삭제하는 것은 부차적인 것이다. 잘못된 메시지 자체를 사용할 수 없는 것으로 바꾸는 것이 첫 번째다.
    다음 도움말의 "Warning"섹션을 참조하십시오.
    https://help.github.com/en/articles/removing-sensitive-data-from-a-repository

    좋은 웹페이지 즐겨찾기