【问题标题】:how to sync a "shadow" git repository with a main repository "secretly"如何“秘密地”将“影子”git 存储库与主存储库同步
【发布时间】:2017-01-15 02:41:07
【问题描述】:

我有一个通过 git 存储库为之工作的客户。我不想让他知道我部分使用了另一个开发人员。因此,我创建了一个“影子”存储库,我的开发人员正在使用它。

如何将“影子”存储库与主存储库同步,使主存储库不知道发生这种情况?

  • 我无法与 git 命令合并,因为这会揭示我真正所做的事情。
  • 我可以复制和粘贴所有文件,但在 git 中可以看到我已删除所有文件并替换为具有相同名称的新文件。这看起来不太好。
  • 我的客户正在使用 bitbucket。我可以向其他开发人员提供我的 bitbucket 登录信息,但我想避免这样做。
  • 实际可行的是,我可以在主存储库中打开一个文件,删除内容,然后粘贴更新的代码。然后我可以提交,看起来是我直接在主存储库中完成了工作。但这很耗时(而且我没有太多时间)。

有没有其他方法可以“秘密”将文件内容从影子存储库复制到主存储库?是否有我可以使用的 linux/osx-command 替换文件的内容而不删除和重新创建文件(然后我可以递归使用)?是否有一个 git 命令可以在不留下我实际做过的证据的情况下实现这一点?

【问题讨论】:

  • 你提出这个问题的方式让你的操作看起来很阴暗,可能会阻止人们回答。
  • 可能是这样,但我真的想不出另一种方式来表达这个问题,这样可以更好地说明这个问题......
  • 我对此表示赞同,因为它给出的答案教会了我一些我从未知道的东西,这在非阴暗的情况下会非常有用!如果我问这个问题,我会说“我如何不与我的客户分享本地修改历史”并留在那里;)

标签: linux git macos bitbucket


【解决方案1】:

您可以使用命令行来拥有由不同 git 存储库修订的同一组 本地 文件。只需使用 GIT_DIR 环境变量。 Git 存储库是完全独立的,可以跟踪同一目录中的文件。

rem set Git to use the sub-developer's git repository
set GIT_DIR=/path/to/sub/repository.com

rem verify which repository that you are on
git rev-parse --git-dir

rem pull the sub-developer's latest
git pull

rem merge, commit, change, push, change branches, whatever
rem ... when the code is the way you want it

rem switch to client repository
set GIT_DIR=/path/to/client/repository.com

rem bring main repository up to date
git commit -m"changes brought over from sub-developer"

rem push the updated code to the client repository
git push

这对于其他开发实践很有用,例如版本控制实验室数据、本地开发实用程序、工作日志和其他“杂项”文件,这些文件似乎与源代码一起累积,但不应与它一起存档。

【讨论】:

  • 哦,这比我希望的还要好。谢谢:)
  • 有些事情没有计划好。我有一个包含现有原始存储库的目录。当我做$ git rev-parse --git-dir 时,我得到了答案.git。然后我(第一次)set GIT_DIR=https://myusername@bitbucket.org/myusername/sub-developer-repository.git,然后$ git rev-parse --git-dir 我得到与之前.git 相同的答案。我该如何设置它以按照您的描述工作?
  • 哦,set 命令不适用于 osx,在这种情况下,选项是 export
  • 在开始使用时遇到问题(获取fatal: not a git repository-error)。为此,我发布了another question
  • 我在日常工作中使用 GIT_DIR,但只在我可以通过我的正常文件系统访问的目录上使用,因此我可以备份到单独的网络驱动器。
【解决方案2】:

在我第一次回答错误后,我觉得有必要再试一次。

尝试阅读 sub developer 分支并使用 git 差异比较/合并到 main。参见 'diff.external' 的 'git help config'。我使用diffuse.exe 和一个批处理文件来映射参数。

工作流程看起来像这样。

rem make a remote to the sub
git remote add MYSUB https://path/to/sub/repository.com

rem see what branches are there
git remote show MYSUB

rem get the branch from the subdeveloper
git fetch MYSUB CurBranch:CurBranch

rem view/manually merge just the modified files 
git diff --diff-filter=M MYSUB/CurBranch 

rem cleanup
git branch -D MYSUB/CurBranch
git rm MYSUB

rem push to main site
git push

这是我用来通过 USB 记忆棒将分支传输到我的实验室机器的方法。我还没有尝试过远程连接。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2022-06-16
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多