기록 없이 agit repo 복사
GitHub에 공개하고 싶은 개인 저장소가 있습니다.그러나 일부 초기 커밋에는 공개하지 않을 정보(하드 코딩된 자격 증명 등)가 포함되어 있습니다.
커밋 기록의 일부 또는 전부를 포함하지 않고 최근 커밋을 공개(공용 저장소에 있는 이전 커밋이 실제로 필요하거나 원하지 않음)하는 가장 쉬운 방법은 무엇입니까?
복제하는 동안 기록의 깊이를 제한할 수 있습니다.
--depth <depth>
Create a shallow clone with a history truncated to the specified
number of revisions.
제한된 기록을 원하는 경우 이 옵션을 사용합니다.
다음 명령을 사용합니다.
git clone --depth <depth> -b <branch> <repo_url>
위치:
depth
포함할 커밋의 양입니다. 즉, 최신 커밋 사용을 원하는 경우git clone --depth 1
branch
복제할 원격 분기의 이름입니다. 즉, 마지막 3개의 커밋을 원하는 경우master
분기 사용git clone --depth 3 -b master
repo_url
저장소의 URL입니다.
삭제.git
기록을 원하지 않거나 필요로 하지 않기 때문에 폴더가 가장 쉬운 경로일 것입니다(Stephan의 말대로).
따라서 최신 커밋에서 새 레포를 만들 수 있습니다. (전체 내역 없이 시드/킥 스타트 프로젝트를 복제하는 방법)
git clone <git_url>
그런 다음 삭제.git
그리고 그 후에 실행합니다.
git init
또는 현재 레포를 재사용하고자 하는 경우: 현재 커밋을 Git 저장소의 유일한(초기) 커밋으로 설정하시겠습니까?
위의 단계를 수행합니다.
git add .
git commit -m "Initial commit"
레포로 이동합니다.
git remote add origin <github-uri>
git push -u --force origin master
#!/bin/bash
set -e
# Settings
user=xxx
pass=xxx
dir=xxx
repo_src=xxx
repo_trg=xxx
src_branch=xxx
repo_base_url=https://$user:$pass@bitbucket.org/$user
repo_src_url=$repo_base_url/$repo_src.git
repo_trg_url=$repo_base_url/$repo_trg.git
echo "Clone Source..."
git clone --depth 1 -b $src_branch $repo_src_url $dir
echo "CD"
cd ./$dir
echo "Remove GIT"
rm -rf .git
echo "Init GIT"
git init
git add .
git commit -m "Initial Commit"
git remote add origin $repo_trg_url
echo "Push..."
git push -u origin master
GitHub 저장소를 템플릿으로 설정할 수 있습니다(설정으로 이동하여 저장소 이름 바로 아래의 옵션을 선택).그러면 "이 템플릿 사용" 단추가 코드 페이지에 나타납니다.이렇게 하면 모든 파일에 복사되지만 모든 기록이 제거됩니다. 원본 레포를 비공개로 유지하는 경우 레포 이름 아래에 세부 정보가 표시되지 않습니다(다른 사람이 아닌 두 가지 모두 소유한 것처럼 사이트에 표시됩니다).레포가 공개된 경우에만 원래 레포에 대한 링크가 레포 이름 아래에 나타납니다.
먼저, 중요한 정보를 포함하는 커밋이 몇 개만 있다면 사용하는 것이 더 낫습니다.git rebase -i
그들을 제거하는 것.그러나 이러한 파일을 자주 터치하면 복잡해질 수 있습니다.또한 다음을 사용하여 초기 커밋을 제거하는 것은 매우 어렵습니다.git-rebase
따라서 초기 커밋에 삭제할 내용이 포함되어 있으면 상황이 더 어려워집니다.
답변은 복잡해 , 하면 그러어전레하에 을 무시하는 입니다..git
.
훨씬 빠른 방법은 기존 커밋과 정확히 일치하는 고립된 커밋을 만드는 것입니다. 예를 들어 다음과 같습니다.
$ TREE=`git cat-file -p master |sed '1,/^$/s/^tree //p;d;'`
$ COMMIT=`echo Truncated tree | git commit-tree $TREE`
$ git branch truncated-master $COMMIT
를 바꿉니다.master
그리고.truncated-master
필요에 따라 커밋 메시지를 변경합니다.정말로 용감하다고 느끼면, 계속해서 다음과 같이 하십시오.
$ git branch backup-master-just-in-case-i-regret-it-later master
$ git push -f origin truncated-master:master
하지만 저라면 이 마지막 단계를 수행하는 것을 피할 수 있을 것입니다. 왜냐하면 현재 레포를 사용하는 다른 모든 사람들에게 문제를 일으킬 것이기 때문입니다.대신 이 새 분기(아마 더 나은 이름으로)를 사용하는 것으로 전환하고 이전 분기는 게시하지 마십시오.
여기에 있는 많은 대답들은 다음을 사용합니다.git clone --depth 1
마지막 커밋을 유지합니다(커밋 메시지 포함).
(에서) 메시지를 한 후 할 수 .git commit --amend -m "UPDATED MESSAGE HERE"
.
이게 바로 기지를 짓누르는 것 아닙니까?마지막 커밋을 제외한 모든 커밋을 누른 다음 (강제로) 푸시합니다.
언급URL : https://stackoverflow.com/questions/29368837/copy-a-git-repo-without-history
'programing' 카테고리의 다른 글
Angular 2 템플릿에서let-*란 무엇입니까? (0) | 2023.05.22 |
---|---|
UI 텍스트 필드가 변경되는 경우 어떻게 확인합니까? (0) | 2023.05.22 |
여러 조건을 가진 mongoose "Find" (0) | 2023.05.22 |
git 삭제 후 커밋이 수행되지 않은 삭제된 파일 복구 (0) | 2023.05.22 |
첫 번째 줄로만 git log를 출력하는 방법은 무엇입니까? (0) | 2023.05.22 |