Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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,以下是我的具体情况: Branches: branch-a branch-b branch-c Working directory: file-a file-b ... 我不希望文件a签入存储库,但我希望为每个分支保留不同的文件a。假设这个文件-a包含每个分支所特有的东西,比如分支名称 有办法做到这一点吗 我想我应该将文件-a放入.gitignore中,这样就不会将其添加到回购协议中。但是,这样做的问题是,这样做之后,我无法为文件编制索引 我想我需要的是.gitignore之类的东西,但要从

以下是我的具体情况:

Branches:
branch-a
branch-b
branch-c

Working directory:
file-a
file-b
...
我不希望文件a签入存储库,但我希望为每个分支保留不同的文件a。假设这个文件-a包含每个分支所特有的东西,比如分支名称

有办法做到这一点吗

我想我应该将文件-a放入.gitignore中,这样就不会将其添加到回购协议中。但是,这样做的问题是,这样做之后,我无法为文件编制索引


我想我需要的是.gitignore之类的东西,但要从暂存区域过渡到提交。

将这些文件添加到您的repo和提交中。git添加文件并提交。当您要合并分支或将分支推送到远程时,请执行以下任一操作:

1:如果您不关心您的回购有空提交,请使用筛选器分支删除该文件:

2:如果你关心有一个空的提交。您的提交正是要删除的文件。您可以通过以下方式查找更改该文件的所有提交:

git log --follow -p -- file-a
然后选择删除更改文件的提交。交互式重基不,你不能那样做

您可以使用新的自Git版本2.5 Git worktree多工作树功能将每个分支保留在其自己的私有工作树中,然后只需取消跟踪或忽略这些文件,并且从不更改任何工作树中的分支


请注意,即使在git版本2.9中,git worktree中仍然存在一些bug。2.6中修复了更引人注目的问题,但工作仍在进行中。如果你是2.6或更高,你应该很好,避免任何特别棘手或不寻常的事情。

一种可能性是使用git挂钩来帮助你。这并不简单,但您的请求也不符合标准git范式

假设您希望file-a.txt按上述方式运行。然后创建具有以下名称的文件:

file-a.txt.br_主控文件,file-a.txt.br_开发文件

在每一个分支中,您都会将您希望的文件放在该分支上。然后打开/创建文件.git/info/exclude,该文件类似于未部署的本地.gitignore,并添加以下行:

文件-a.txt*

这将防止上述所有文件在工作区中显示为可提交文件


将它连接在一起的魔法是一个git钩子,请参见例如运行签出后的教程。脚本将检查它是否是分支签出,然后将文件file-a.txt.br_{branch_name}复制到file-a.txt。脚本的具体形式由您决定,但可以是bash,或者类似python的东西,如果您愿意的话。

如果您不想提交它,为什么要准备它

你可以做一个预提交钩子


您可以git将它添加到索引中,但它不会被这个钩子提交。如果您确实想要提交它,那么在git提交时添加选项-n以绕过这个钩子。如果您想在git重置之前保留对file-a所做的更改,可以在其之前添加git stash

@trentcl尽管我很欣赏这种迟钝的类比,但我有本地分支机构设置,不应该与其他人共享,也不应该参与回购。但索引不是按分支机构保存的;只有一个索引。我认为git worktree特性是您的解决方案。这不是一个坏主意,但我正在寻找一种更干净的方法来实现这一点。这对我来说也有些不切实际,因为这些文件可能会存在很长时间,同时能够频繁地向上游推送。当您确实希望对各种特定于分支的文件进行版本控制时,这种方法特别好。也就是说,假设您使用的是最新版本的branch-a,其中file-a读取的Zuul已经消失,Dana又回来了。现在,您可以查看一段时间前的版本,它应该是没有Dana,只有Zuul。稍后,返回分支a的尖端,希望该文件重新现代化。因此,您需要某种版本控制操作。你的钩子脚本可以做到这一点。
git log --follow -p -- file-a
#!/bin/bash

git reset <path_of_file-a>