是否可以索引gitignored的文件?

时间:2016-07-12 20:59:18

标签: git

以下是我的具体情况:

Branches:
branch-a
branch-b
branch-c

Working directory:
file-a
file-b
...

我不希望file-a签到存储库,但我确实希望为每个分支保存一个不同的file-a。让我们说这个文件-a包含每个分支的独特内容,如分支名称。

有办法做到这一点吗?

我认为我想将file-a放入.gitignore,以便它不会被添加到回购邮箱中。但是,问题在于我无法在执行此操作后对文件编制索引。

我认为我需要的是.gitignore,但是从暂存区域转移到提交。

4 个答案:

答案 0 :(得分:4)

一种可能性是使用git hooks来帮助你。它不是很简单,但是你的请求再也不符合标准的git范例。

假设您希望file-a.txt的行为如上所述。然后使用以下名称创建文件(例如):

file-a.txt.br_masterfile-a.txt.br_dev,...

在每一个中,你把你喜欢的文件放在那个分支上。然后打开/创建文件.git/info/exclude(就像没有部署的本地.gitignore),并添加以下行:

file-a.txt*

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

将它绑定在一起的魔法将是一个运行post-checkout的git钩子(参见例如https://www.atlassian.com/git/tutorials/git-hooks/local-hooks的教程)。该脚本将检查它是否为分支签出,然后将文件file-a.txt.br_{branch_name}复制到file-a.txt。脚本的确切形式取决于您,但如果您愿意,可以使用bash或python等。

答案 1 :(得分:2)

不,你做不到。

可以使用(自Git 2.5版以来的新版本)git worktree多工作树功能将每个分支保存在自己的私有工作树中,然后只需拥有这些文件未跟踪或忽略,并且永远不会更改任何工作树中的分支。

请注意,即使是Git版本2.9,git worktree仍然存在一些错误。 2.6中更明显的是固定的,但是这里的工作仍在进行中。如果你达到2.6或更高,你应该没事,并避免任何特别棘手或不寻常的事情。

答案 2 :(得分:1)

将这些文件添加到您的仓库并提交。 git add file-a并提交。当您将分支合并或推送到遥控器时,可以:

1:如果您不关心拥有空提交的repo,请使用filter-branch删除该文件:

git filter-branch --tree-filter 'rm -f file-a' HEAD

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

git log --follow -p -- file-a

然后选择删除更改文件的提交。 (互动式反思)

答案 3 :(得分:0)

如果你不想提交它,你为什么要上台呢?

你可以制作一个var express = require('express') , router = express.Router() // Router functions here, as normal; each of these // run only on requests to the server router.get('/', function (req, res, next) { res.status(200).end('Howdy'); }); module.exports = function(my_var){ // do as you wish // this runs in background, not on each // request return router; } 钩子。

pre-commit

你可以#!/bin/bash git reset <path_of_file-a> 它到索引但它不会被这个钩子提交。如果您确实要提交,请在git add时添加选项-n以绕过此挂钩。如果您希望在git commit之前保留对file-a所做的更改,则可以在其前面添加git reset