Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 - Fatal编程技术网

Git-创建存储库并仅跟踪新文件

Git-创建存储库并仅跟踪新文件,git,Git,是否可以在非空目录中初始化新的git存储库,并只跟踪初始化后新添加的文件/文件夹,而忽略旧文件/文件夹。例如: 初始化新回购之前的当前文件夹结构: FolderA/ FolderB/ file1.php file2.php 初始化新回购并创建新文件和目录后: FolderA/ // old, ignore FolderB/ // old, ignore FolderC/ // new, track file1.php // old, ignore file2.php // old,

是否可以在非空目录中初始化新的git存储库,并只跟踪初始化后新添加的文件/文件夹,而忽略旧文件/文件夹。例如:

初始化新回购之前的当前文件夹结构:

FolderA/
FolderB/
file1.php
file2.php
初始化新回购并创建新文件和目录后:

FolderA/  // old, ignore
FolderB/  // old, ignore
FolderC/  // new, track
file1.php  // old, ignore
file2.php  // old, ignore
file3.php  // new, track

如果git只能忽略少量文件,那么可以使用git的
gitignore
功能。 要创建简单的gitignore,请执行以下步骤:

  • 在存储库文件夹中创建一个名为
    .gitignore
  • 使用任何文本编辑器(如记事本、记事本++)打开文件
  • 列出所有你想被git忽略的文件,并在每一行分别列出每个文件的名称。 例如

    福尔德拉 FolderB file1.php file2.php

  • 有关更复杂的
    gitignore
    信息,请参阅:

    您还可以使用诸如为您生成
    gitignore
    文件之类的工具


    希望这有帮助。

    gitinit
    本身无法做到这一点,至少据我所知。但是一点贝壳魔法就可以做到:

    cd /path/to/directory/
    touch .gitignore # creates file .gitignore if not yet existing
    for file in *; do
        echo $file >> .gitignore
    done # appends all the filenames of files in directory to file .gitignore
    git init # inits the repository
    

    在repo初始化之后,您仍然需要在提交之前添加文件(包括
    .gitignore
    )。

    Git将只跟踪您明确告诉它使用
    Git add
    的文件。因此,您无需做任何事情:只是不要告诉Git跟踪您不希望它跟踪的文件

    如果查看
    git status
    ,它会列出所有未跟踪的文件,这可能会让人恼火

    还有一个简单的解决方案:忽略所有文件:

    这将告诉Git忽略所有文件。您仍然可以使用
    git add-f
    将单个文件添加到存储库中(强制git忽略文件被忽略的事实需要
    -f

    如果要使用
    git add.
    git add somedirectory
    添加所有新文件,则需要在
    .gitignore
    中单独列出要忽略的所有文件。您可以使用我上面描述的“恼人”事实,即
    git status
    将列出所有未跟踪的文件:

    git status --porcelain -uall | grep -E '^\?\? ' | cut -d ' ' -f2- > .gitignore
    
    --ceral
    将git status的输出格式指定为“ceral v1”格式。陶瓷输出格式保证永远不会更改,并且设计为易于机器解析,而不像短或长输出格式,短或长输出格式设计为人类可读,因此可能会更改以使其更易于阅读
    -uall
    告诉
    git status
    列出所有未跟踪的文件,否则仅当目录中的所有文件都未跟踪时才会列出目录名

    grep
    查找以
    ??
    开头的行,这是未跟踪文件的列表方式。然后,
    剪切
    会剪切文件名
    ??
    后面的所有内容


    注意:这将与名为
    abc\n??例如,def.txt
    。如果您有这样的文件,您需要强化命令,例如使用
    -z
    标志到
    git status
    ,它打印由ASCII NUL分隔的记录,而不是换行符。

    I最终排除所有文件/文件夹,只包括特定的文件/文件夹。以下是我所做的:

  • 在根目录中创建了一个空的
    .gitignore
    文件,并添加了
    *
    以取消对所有文件和文件夹的跟踪
  • 已初始化该目录中的新存储库
  • 编辑
    .gitignore
    ,方法是添加从此点开始要跟踪的特定文件和文件夹
  • My final.gitignore现在使用此模式:

    # Ignore everything
    *
    
    # Include folders
    !/folderC
    !/folderD
    
    # Include files
    !file3.php
    !file4.php
    
    # Include files containing
    !*foo*
    
    这一变通办法目前似乎运作良好。多亏了你的回答,我被指引了正确的方向

    其他SO用户也提供了一些有用的资源:


    忽略是通过创建一个名为
    .gitignore
    的文件来完成的,该文件包含要忽略的文件的特定模式。所以我认为,
    gitinit
    不能直接帮助您满足这个特定的需求;以*存档;执行echo$file>>.gitignore;如果直接在git init之前执行,则done可能很有用?(应该适用于Linux/Mac和Windows上的Git Bash)我应该在初始化之前创建.gitignore并定义要手动跟踪的文件,同时排除所有其他文件夹/文件吗?上面的shell命令会这样做。请尝试一下,看看这是否是你想要做的。但需要明确的是:默认情况下,git将尝试跟踪所有内容,除了与
    中的模式匹配的文件。gitignore
    文件,请参阅。所以你不需要定义git应该跟踪哪些文件,只有git应该忽略的文件。谢谢Michael。我的结构被简化了,但是真正的项目有超过10k个文件,所以在gitignore中添加所有文件是不可取的。我猜如果我创建一个新的gitignore,在开始时排除所有(*),然后明确允许特定的文件/文件夹(!folderC,!file3.php)等…也应该这样做吗?10k文件顶级?这似乎很奇怪。无论如何,我想你可以这样做,尽管我不确定这是否是处理git的常见模式…是的,如果我在init之前创建gitignore,排除所有(*),然后手动添加特定的文件/文件夹,它就会起作用-这个想法来自你的第一条评论。如果你修改你的答案,我可以接受。谢谢很高兴我能帮忙。我不会以这种方式修改我的答案,因为即使它可以忽略除某些路径之外的所有内容,但这并不是我建议的解决方案。很公平,理论上没有
    。gitignore
    ,你也可以做得很好。如果您选择这种方式,使用
    git status
    肯定会在某些时候变得不愉快。事实上,
    git status
    将准确列出您要忽略的文件,因此您可以轻松创建
    .git
    
    # Ignore everything
    *
    
    # Include folders
    !/folderC
    !/folderD
    
    # Include files
    !file3.php
    !file4.php
    
    # Include files containing
    !*foo*