Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git又一次这样做了——将代码和存储库混为一谈,而不是在进行克隆时使用一个漂亮的.Git文件夹,这只是故事的一半_Git_Version Control - Fatal编程技术网

Git又一次这样做了——将代码和存储库混为一谈,而不是在进行克隆时使用一个漂亮的.Git文件夹,这只是故事的一半

Git又一次这样做了——将代码和存储库混为一谈,而不是在进行克隆时使用一个漂亮的.Git文件夹,这只是故事的一半,git,version-control,Git,Version Control,我想确保在创建我的第一个剪切并存储我的回购后,我可以再次提取它,但提取到不同的位置,而不是我当前的工作目录。这些就是我工作流程中的步骤,即使在一整天或更长的时间后,我仍然认为我已经明白了,但我明白了吗 我在电脑上安装了git paul@homepc ~ (master) $ git config --list gui.recentrepo=C:/My_codebase core.worktree=C:/Users/paul/JavaCode/SpringHibernateCode/Seleniu

我想确保在创建我的第一个剪切并存储我的回购后,我可以再次提取它,但提取到不同的位置,而不是我当前的工作目录。这些就是我工作流程中的步骤,即使在一整天或更长的时间后,我仍然认为我已经明白了,但我明白了吗

我在电脑上安装了git

paul@homepc ~ (master)
$ git config --list
gui.recentrepo=C:/My_codebase
core.worktree=C:/Users/paul/JavaCode/SpringHibernateCode/SeleniumWebDriver
下面我的git repo包含了所有代码,这就是我要克隆的代码

paul@homepc ~ (master)
$ ls -alrt c:/My_codebase
total 16
drwxr-xr-x    1 Internet Administ    28672 Mar 23 18:25 ..
drwxr-xr-x    3 Internet Administ        0 Mar 24 12:30 .
drwxr-xr-x   12 Internet Administ     4096 Mar 24 21:14 .git
Testproj3
是我想要重新创建我的
my_codebase
克隆的地方。如下所示,它不存在:

paul@homepc ~ (master)
$ cd C:/Users/paul/JavaCode/SpringHibernateCode/testproj3
sh.exe": cd: C:/Users/paul/JavaCode/SpringHibernateCode/testproj3: No such file or directory
好吧,好吧,我会做到的

paul@homepc ~ (master)
$ cd C:/Users/paul/JavaCode/SpringHibernateCode

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ mkdir testproj3
Git仍然认为我已经有了一棵工作树。很公平。我不能再喝一杯吗?我可能需要两个工作树来尝试不同的东西

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ cd testproj3

paul@homepc ~/JavaCode/SpringHibernateCode/testproj3 (master)
$ git clone "c:/My_codebase/.git" .
fatal: working tree 'C:\Users\paul\JavaCode\SpringHibernateCode\SeleniumWebDriver' already exists.
好吧,也许我必须告诉git还有另一个工作树区域要使用,所以我使用显式工作树参数。但是,即使
Testproj3
是空的,它认为可能是因为存在一个文件夹,它已经被创建了

paul@homepc ~/JavaCode/SpringHibernateCode/testproj3 (master)
$ git --work-tree="C:/Users/paul/JavaCode/SpringHibernateCode/testproj3" clone "c:/My_codebase" .
fatal: working tree 'C:/Users/paul/JavaCode/SpringHibernateCode/testproj3' already exists.
因此,我尝试帮助git并删除该文件夹,并希望现在可以这样做:

paul@homepc ~/JavaCode/SpringHibernateCode/testproj3 (master)
$ cd ..

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ rm testproj3
rm: `testproj3' is a directory

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ rmdir testproj3
我认为git已经做了我认为它应该做的事情…或者已经做到了

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ git --work-tree="C:/Users/paul/JavaCode/SpringHibernateCode/testproj3" clone "c:/My_codebase/.git" 
"C:/Users/paul/JavaCode/SpringHibernateCode/testproj3"
Cloning into 'C:/Users/paul/JavaCode/SpringHibernateCode/testproj3'...
done.
Checking out files: 100% (61/61), done.
当我真正仔细观察时,我注意到git将
.git
repo文件与我的
src
resultOutput
bin
文件夹混在一起,这些文件夹实际上是我代码的一部分:

paul@homepc ~/JavaCode/SpringHibernateCode (master)
$ ls -alrt ./testproj3
total 20
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 info
drwxr-xr-x    1 Internet Administ     4096 Mar 25 00:40 hooks
-rw-r--r--    1 Internet Administ       73 Mar 25 00:40 description
drwxr-xr-x    1 Internet Administ     4096 Mar 25 00:40 ..
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 refs
-rw-r--r--    1 Internet Administ      107 Mar 25 00:40 packed-refs
drwxr-xr-x    1 Internet Administ     8192 Mar 25 00:40 objects
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 logs
-rw-r--r--    1 Internet Administ      391 Mar 25 00:40 config
-rw-r--r--    1 Internet Administ       23 Mar 25 00:40 HEAD
-rw-r--r--    1 Internet Administ     3439 Mar 25 00:40 .classpath
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 bin
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 .settings
-rw-r--r--    1 Internet Administ      393 Mar 25 00:40 .project
drwxr-xr-x    1 Internet Administ        0 Mar 25 00:40 src
drwxr-xr-x   11 Internet Administ     4096 Mar 25 00:40 resultOutput
-rw-r--r--    1 Internet Administ     5976 Mar 25 00:40 index
drwxr-xr-x    1 Internet Administ     4096 Mar 25 00:40 .
所以我被迫在git之后清理!这里发生了什么事?为什么它没有把它的
.git
文件分离到一个整洁的文件夹中?不仅如此,它似乎还为源文件夹
testproj3
赋予了
hidden
属性


这些bug只在预览版中出现吗?是因为我在Windows上使用Git Bash吗?所以它不是完美的?当然不是。

您不能克隆.git文件夹。您可以克隆包含.git文件夹的文件夹

git clone "c:/My_codebase" . 
最后,您真的应该阅读git的基础知识:

除非设置了
GIT\u WORK\u TREE
环境变量,否则无法获得该错误消息。把它解开

这里发生了什么事???为什么它没有将它的.git内容分离到一个整洁的文件夹中

因为您在命令行上指定了
--work tree
,这将覆盖它设置的健全性检查。不要那样做


取消设置GIT_WORK_TREE并运行GIT clone,让它自己创建目录,而不是强制创建
GIT_WORK_TREE
--WORK TREE
标志在您需要时是有用的选项,但在正常的工作流中是非常不必要的。您试图在这个非常标准的工作流中使用它们,这是一个危险信号,表明某些地方不正确。

在本例中,我假设您指的是您自己?;)我猜这家伙对我有影响。甚至我们开发者都是情感动物。事实上,从专业角度讲,我认为要么我必须放弃使用命令行用法,即Git Bash,使用SourceTree作为Git的Gui,要么如果这些基本工作流程造成了太多问题,谁会关心这些灵活性呢?如果我在尝试使用此工具之前必须考虑太多,也许我应该尝试mercurial,看看是否分布式VC给了我同样的头痛-我不希望在生产环境中遇到这样的麻烦-你希望你的工具是显式的状态+ve-这个Git不是那样@用户1561783请不要在您的问题中使用所有的大写字母,这会使它们难以阅读,而且看起来您是在对我们大喊大叫。@用户1561783您试图配置
gui.recentrepo
core.worktree
设置有什么原因吗?除非人们试图用Git做一些非传统的事情,否则他们通常不会去搞乱它们。你试图解决的原始问题是什么?作为旁注,当我个人只想拥有另一个工作副本时,我所做的只是制作另一个本地克隆,我不必乱搞工作树设置之类的东西。默认克隆可能会再次复制整个repo,具体取决于您的平台,但如果您的repo一开始不是很大,那么额外的空间就不成问题。如果这是一个问题,我肯定有办法解决这个问题,但我必须做一些研究,看看它们首先是什么。谢谢Carl,我想我试过了-所以为了更好的衡量,我又试了一次,它做了同样的事情-它将克隆代码和.git文件混合在一起。。。。paul@homepc~/JavaCode/SpringHibernateCode(master)$git--work tree=“C:/Users/paul/JavaCode/SpringHibernateCode/testproj3”克隆”C:/My_代码库”“C:/Users/paul/JavaCode/SpringHibernateCode/testproj3”克隆到“C:/Users/paul/JavaCode/SpringHibernateCode/testproj3”。。。完成。签出文件:100%(61/61),完成。删除--work树。你知道你为什么用它吗?如果没有,则不要使用--work tree选项。简单明了的
git克隆“c:/My\u代码库”.
谢谢Edward-你是对的,我给Git提供了太多的选项来处理-同一个env var在我的命令行中全局声明,在本地声明不同-它的选择方式一定有缺陷-我会假设它应该读取我命令行中的内容-所以我做了以下取消设置Git_dir和git_work_树,然后是一个
$git clone“c:/My_codebase”“c:/Users/paul/JavaCode/SpringHibernateCode/testproj3”
而且它的行为正确,没有将.git中的文件与实际代码中的文件混淆。谢谢Edward-我之所以设置了一个全局git_WORK_树,是因为我可以将repo和工作代码目录分开。当我在我的代码目录中测试我的应用程序时,我不想覆盖我的repo,这是很容易做到的。这是第一家可以托管回购协议的风险投资公司
paul@homepc ~/JavaCode/SpringHibernateCode/testproj3 (master)
$ git clone "c:/My_codebase/.git" .
fatal: working tree 'C:\Users\paul\JavaCode\SpringHibernateCode\SeleniumWebDriver' already exists.