如何将更改提交到本地Repo,而不使用Git将更改推送到远程Repo
在我的Git存储库中,我有一个需要包含工作目录位置的文件。这对于克隆存储库的每个人来说都是不同的,并且这个特定文件对于每个用户都有正确的(唯一的)目录,这一点很重要。除唯一文件路径外,文件的大部分内容对于所有用户都是通用的 请注意,我们不能为每个用户维护不同的文件(Git中的唯一文件名或文件位置),因为我们的工具会搜索特定的文件位置和文件名 目前我们解决这个问题的方法是更新文件路径,使其指向我们的工作目录,然后我们再也不会提交这个更新。我们将其作为本地更改保留,当我们拉取或合并分支时,我们隐藏该本地更改以避免任何冲突。拉/合并完成后,我们弹出隐藏。下面是一个工作流示例,我们将本地更改提交到一个分支(如要素分支),然后将这些更改合并到另一个分支(如主分支)。我们将所有更改推送到这两个分支,并在此过程中使用如何将更改提交到本地Repo,而不使用Git将更改推送到远程Repo,git,Git,在我的Git存储库中,我有一个需要包含工作目录位置的文件。这对于克隆存储库的每个人来说都是不同的,并且这个特定文件对于每个用户都有正确的(唯一的)目录,这一点很重要。除唯一文件路径外,文件的大部分内容对于所有用户都是通用的 请注意,我们不能为每个用户维护不同的文件(Git中的唯一文件名或文件位置),因为我们的工具会搜索特定的文件位置和文件名 目前我们解决这个问题的方法是更新文件路径,使其指向我们的工作目录,然后我们再也不会提交这个更新。我们将其作为本地更改保留,当我们拉取或合并分支时,我们隐藏该
git stash
和git stash pop
隐藏本地更改
// starting in branch named "original_branch"
git commit // our other changes that we do want to share with others
git stash // stash the one file with the updated user directory
git pull
git push
git checkout another_branch
git pull
git merge original_branch
git push
git stash pop
对我来说,这只是一个小麻烦,因为上面的工作流程工作得很好。但是,由于我与一个团队合作,像这样的变通最终会导致错误,然后我需要花时间帮助人们解决冲突和其他Git问题,而不是做我的实际工作。如果我能让每个用户在推送其他更改时,将他们的文件版本和更新的文件路径提交到本地存储库,而不将更改发送到远程存储库,这将是非常理想的。这似乎不可能,但我希望有人知道一个解决方案
这就是我想象中的解决方案:
vim special_file.txt // update just that one line in special_file.txt
git commit --local-only -- special_file.txt
git commit -- some_other_file.txt
git push // only pushes the update for some_other_file.txt
当然,我刚刚为git commit
编写了--local only
选项,但我希望有人知道类似的事情。我已经检查了Google和Stack Overflow,但似乎没有人问过类似的问题
编辑:到目前为止,提出的大多数建议都与非基于Git的解决方案有关(例如符号链接)。我最初想要一个如上所述的基于Git的解决方案,因为它可以解决我的问题,同时还考虑到一些我还没有提到的其他约束。让我在这里列举其他限制条件,以便在我们试图提出解决方案时考虑到它们
git checkout
中获得的完全一致;这似乎不太可能
我认为工具本身可以通过调用git checkout
来构建工作树,然后在做出荒谬的假设,即它接收到的文件是针对该机器本地化的之前,不会给您任何修改工作树的机会。在这种情况下,我想您可以设置一个污点过滤器(通过git属性),在签出过程中注入本地值(从环境中获取,或在repo之外的特定位置的本地文件,或任何东西)。(相应的干净过滤器必须确保取回本地值。)这需要大量特定于项目的自定义脚本,因此除了上面概述的想法外,我无法提供更多细节
但是,要建立一个我真的认为会在你最不经意的时候崩溃并导致奇怪问题的东西,需要做很多工作;而且这似乎不太可能是必要的
在git中,跟踪文件是跟踪文件;它的变化总是共享的。因此,找到一种方法来分离局部变化(这不能被跟踪)