我无法克隆到空目录,因为我在目录A中有不在目录中的文件B,但我想保留它们。
不能复制.git,因为我希望引用与它们一起推/拉,并且我不想手动设置它们。 />有什么办法吗?
更新:我认为这可行,有人可以看到任何问题吗? ->
cd a
git clone --no-hardlinks --no-checkout ../b a.tmp
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this
#1 楼
这对我有用:评论
当传入文件已经存在时(如原始问题所述),这在非空目录中不起作用。但是,如果您在git提取之后git reset origin / master,它将起作用(还保留所有本地更改)。
–荒地
2014年8月15日下午0:42
致命:无法同时更新路径并切换到分支“ master”。
–阿诺德·罗阿(Arnold Roa)
15年4月19日在23:43
这个答案对我不起作用。当我执行git checkout ... git抱怨我的所有文件都将被覆盖,我应该先移动它们。当我首先执行git reset origin / master /时,checkout命令抱怨名为master的分支已经存在。
–萨斯基亚
16-10-20在17:16
git checkout master对我来说是足够的最后一步。
– yoyo
17年1月11日在1:40
所有步骤都工作正常,但最后一个让我明白了:致命:已经存在一个名为“ master”的分支。我想我并不是真的需要它。
– Shadi
17-10-20在11:45
#2 楼
在以下Shell命令中,existing-dir
是一个目录,其内容与git存储库中的repo-to-clone
跟踪文件相匹配。 >评论
我需要执行git reset --hard HEAD,否则它不会在“已删除”的文件上放弃。
–迪米塔尔
11年8月31日在18:25
git reset HEAD对我来说很好。 git reset --hard HEAD会破坏文件中的所有更改,因此,如果它们与存储库中的文件不完全相同,则不应这样做。
– Tgr
2012-12-19 19:58
git reset HEAD似乎对我没有任何影响。 git reset --hard HEAD可以-但是会丢失您对文件所做的任何更改。有更好的解决方案吗?
–雅各布·多曼(Jacob Dorman)
13年7月20日在1:14
@Casey的答案-git init / remote add / fetch / checkout-更干净,更简单,不需要任何临时文件夹。
– yoyo
14年7月25日在21:03
当文件夹中已经有文件需要保留但不在git repo中时,@ Casey的答案对我不起作用。这对于在运行创建了文件和目录的安装脚本之后更新配置非常有用,但是您需要在已安装项的顶部更新/添加文件。
–索尔斯顿
14年8月4日在15:58
#3 楼
对对我有用的答案之一进行了少许修改:git init
git remote add origin PATH/TO/REPO
git pull origin master
立即开始在master分支上工作。
评论
必须重置HEAD-很难清除脏的现有目录,而无需删除gitignore中指定的不相关文件
–雷·福斯(Ray Foss)
17年6月28日在17:25
这是对我真正有用的,而不是@cmcginty的答案。
–certainlyakey
17年7月7日在6:18
这并不完全等同于git-clone-缺少的是master分支的上游信息。这可以通过添加git branch --set-upstream-to = origin / master master来解决。
–Slaaven Rezic
18年4月20日在13:46
这个版本对我有用,只需要执行git reset --hard HEAD
–FrédéricKlee
19-09-17在15:11
#4 楼
警告-这可能会覆盖文件。git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master -f
从@cmcginty的答案进行了修改-没有-f对我不起作用
评论
当然,此后您需要使用git checkout签出所有文件。
–克里斯·斯特里钦斯基(Chris Stryczynski)
19年4月13日在11:03
#5 楼
这是我遇到相同问题时所要做的(至少我认为这是相同问题)。我进入目录A并运行git init
。由于我不希望git跟随目录A中的文件,因此我编辑了.gitignore并将现有文件添加到其中。之后,我运行了git remote add origin '<url>' && git pull origin master
etvoíla,将B克隆到A中而没有打h。 评论
当传入文件已经存在时(如原始问题所述),该技术不适用于非空目录。
–荒地
14年8月15日在0:49
#6 楼
另一个简单的方法似乎很适合我:git clone --bare $URL .git
git config core.bare false
我检出现有文件目录的主要用例是使用Git控制Unix点文件。在新帐户上,主目录中已经有一些文件,甚至可能是我想从Git获取的文件。
评论
裸存储库的设置略有不同,尽管确实可以,但我不建议这样做。 :)
–雷神召唤师
16-02-17 '23:54
你可以说得更详细点吗?有什么不同吗?
–肯·威廉姆斯
16-2-18的2:02
只有两个区别:1.).git / config文件指示存储库是裸露的。 2.)通常存储在.git中的文件存储在根目录(您称为.git)
– mozey
17年2月1日16:00
这些正是克隆到.git并将core.bare设置为false所需要的更改,因此我对这种方法仍然感觉很好。
–肯·威廉姆斯
17年5月18日在22:12
#7 楼
我刚才使用过此功能,需要的破坏性最低的命令:#8 楼
这对我有用:cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master
#9 楼
我计划将新的Apache Web目录(使用WHM创建的帐户)用作登台Web服务器时遇到类似的问题。我首先需要使用代码库克隆我的新项目,然后通过从存储库中提取代码来定期部署更改。问题是该帐户已经包含Web服务器文件,例如:
.bash_history
.bash_logout
.bash_profile
.bashrc
.contactemail
.cpanel/
...
...我不想删除或提交到我的存储库。我需要他们呆在那儿且没有跟踪。
我做了什么:
我进入了我的Web文件夹(existing_folder):
cd /home/existing_folder
然后:
git init
git remote add origin PATH/TO/REPO
git pull origin master
git status
它显示(如预期的那样)许多未分级文件的列表-最初在我的cPanel中已经存在的文件网络帐户。
然后,感谢本文,我将这些文件的列表添加到了:
**.git/info/exclude**
此文件,几乎就像
.gitignore
文件允许您忽略暂存的文件。此后,我在.git /目录中没有任何内容可提交-它就像一个个人的.gitignore
,其他人都看不到。现在检查
git status
返回: br /> 现在,我只需从git存储库中提取内容就可以将更改部署到此Web服务器。希望这有助于某些Web开发人员轻松创建登台服务器。
#10 楼
也许我误解了您的问题,但是如果您将文件从A复制/移动到git repo B并使用git add添加所需的文件,会不会更简单?UPDATE:来自git doc :
仅当目录为空时才允许复制到现有目录。
源:http://git-scm.com / docs / git-clone
评论
不,所有者和文件可以是任意的。这是针对多个开发人员的情况。我们都有现有的目录,并且只有一个当前具有git checkout。我们所有人都具有相同的文件子集,因此我们希望其他开发人员能够在保留其文件的同时进行克隆。而且它应该尽可能优雅和方便。
–戴尔·森林人
10 Mar 9 '10 at 17:32
老实说,我看不到在这种情况下发展的意义。您不能使用分支和合并操作吗?还是拥有带有外部依赖项的子存储库?您为什么要依赖一个“ git checkout”?
– Roberto Aloi
2010年3月9日在18:01
“单次git checkout”不是整个折磨的重点。就是这样,我们需要一种前进的方式。我用似乎有效的解决方案更新了原始问题。不过,我感谢您的反馈。
–戴尔·森林人
2010年3月9日在18:14
对此有很多合理的案例-我必须设置一个复杂的文件夹树,然后才能设置我的项目源,并且该文件夹树包含例如不能存储在GitHub上的许可作品。
– BrainSlugs83
2014年10月10日下午5:09
#11 楼
这是我在做什么:git clone repo /tmp/folder
cp -rf /tmp/folder/.git /dest/folder/
cd /dest/folder
git checkout -f master
#12 楼
这对我来说是工作,但您应该将远程存储库文件合并到本地文件:git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status
#13 楼
我一直在寻找类似的东西,这是我想出的:我的情况是我有一个活动的Web树,我试图为其创建一个远程存储库而不移动任何当前Web树中的文件。这是我所做的:
转到Web树并运行
git init
转到存储库的预期位置并运行:
git clone --bare /path/to/web/repo
在我的远程仓库中编辑配置文件,然后删除
[remote "origin"]
部分。在Web树中的.git / config中添加一个指向新远程仓库的
[remote "origin"]
部分。评论
我很喜欢这个食谱。
– dland
2014年6月2日在18:05
git clone --bare在这里是多余和circuit回的。为什么不首先使用git remote add origin
–荒地
14年8月15日,0:55
#14 楼
我喜欢Dale的回答,而且还添加了git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214
较浅的深度避免了很多额外的早期开发人员提交。新分支为我们提供了良好的可视化历史记录,该服务器中放置了一些新代码。在我看来,这是完美使用的分支。感谢所有发布在此的人的深刻见解。
#15 楼
尝试克隆到c / code时遇到相同的问题,但是此文件夹包含一堆项目。
我在c / code / newproject中创建了一个新文件夹
,并将我的克隆映射到该文件夹。
在桌面上使用git,然后询问我的用户,然后进行克隆。
#16 楼
以下对我有用。首先,我要确保a
目录中的文件是受源控制的:$ cd a
$ git init
$ git add .
$ git commit -m "..."
然后
$ git remote add origin https://URL/TO/REPO
$ git pull origin master --allow-unrelated-histories
$ git push origin master
评论
也许您可以更改接受的答案?