我的问题是对how to create a new git repository from an existing one的直接跟进。我按照那里的程序去了#34; git --bare init"然后" git push ssh:// my_host / new_repo + topic1:master"。第二步的输出看起来像是正确复制,但新存储库不包含任何源文件和" git status"给出错误"致命:此操作必须在工作树中运行"。匿名日志如下。我错过了什么? (如果不明显,我是一个git新手。)
> mkdir foo
> cd foo
> setenv GIT_DIR ./.git
> git --bare init
Initialized empty Git repository in /xxx/foo/.git/
> ls -A
.git
> cd ../bar
> git push ssh://127.0.0.1/xxx/foo +for-pr:master
Counting objects: 10171, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6647/6647), done.
Writing objects: 100% (10171/10171), 7.05 MiB | 9.62 MiB/s, done.
Total 10171 (delta 5461), reused 4992 (delta 2529)
remote: Resolving deltas: 100% (5461/5461), done.
To ssh://127.0.0.1/xxx/foo
* [new branch] for-pr -> master
> cd ../foo/
> ls
> git status
fatal: This operation must be run in a work tree
答案 0 :(得分:0)
你创造了一个"裸露的"存储库,其中仅包含.git
子文件夹中的版本控制信息。您可以使用ls -a
查看此文件夹。 (以.
开头的文件和文件夹名称在Linux世界中被视为"隐藏"。
裸仓库不包含任何文件的本地副本。这是一个完整的回购点。 This blog article提供了有关裸git回购的详细信息。
请注意,命令git status
无法使用裸存储库运行,因为它将工作目录与当前分支进行比较。
如果您需要本地工作目录,请在初始化回购时删除--bare
:
git init
我的问题是如何制作一个新项目(部分)旧项目,保留其历史,然后独立建设。
我100%不同意您在原始答案中提供的链接中接受的答案。裸存储库不是用于您的目的的正确工具,也不是提出该问题的人的工具。
相反,Git的预期用途是在现有仓库中创建一个新分支以继续开发。:
git checkout -b my-new-branch
如果您不想再保留其历史记录,则可以删除所有其他分支。
如果您想要一个全新的仓库,那么您应该克隆现有的仓库:
cd <parent folder where you want the new repo>
git clone <URL or path to original repo> foo
cd foo
现在foo
将包含副本,您可以创建一个新的分支作为explaininedearlier。