Git 离线提交修改

背景设定:电脑 C(如公司电脑,没有网络或没有上传权限)上修改代码,借助电脑 P(如个人电脑,有网络,有权限)更新远程仓库

1. 电脑 C 上修改代码

  • (1) 正常修改代码,可以选择配置 git 用户
    # 查看当前用户名和邮箱
    git config user.name
    git config user.email
    # 配置新的用户名和邮箱,去掉 --global 则只在当前仓库中有效
    git config --global user.name "用户名"
    git config --global user.email "邮箱"
    # git config --global --unset user.name
    # git config --global --unset user.email
    
  • (2) 将修改提交到本地仓库:
    # 添加更改到暂存区
    git add .
    # 提交更改到本地仓库
    git commit -m "Your commit message"
    
  • (3) 打包当前分支的改动为 your_changes.bundle 文件
    git bundle create your_changes.bundle HEAD master
    
    这将创建一个包含从 master 分支到当前 HEAD 所有提交的 bundle 文件。如果你的更改在其他分支上,或者你想打包不同的范围的提交,需要相应地调整这个命令。

2. 电脑 P 更新到远程仓库

  • (1) 通过内网或 U 盘获得电脑 C 打包的文件 your_changes.bundle,拷贝到电脑 P 的代码路径下,并验证文件完整性
    cd your_repo_directory
    git bundle verify your_changes.bundle
    
  • (2) 从本地打包文件中获取最新更新,并存储到一个临时分支 temp_branch 上:
    git fetch your_changes.bundle master:temp_branch
    
  • (3) 合并到 master 分支
    # 切换到要合并的分支
    git checkout master
    # 合并刚才的临时分支
    git merge temp_branch
    # 删除临时分支
    git branch -d temp_branch
    
  • (4) 推送到远程仓库
    git push origin master
    

3. 电脑 C 上创建新的分支,在电脑 P 上同步

上面 1,2 的操作是针对已有分支的修改,如 master。

电脑 C 上执行:

# 创建并进入新分支
git checkout -b new_branch

# 添加修改
git add .
git commit -m 'your commit'

# 创建 bundle 文件
git bundle create new_branch.bundle HEAD new_branch

电脑 P 上执行:

# 创建并进入新分支
git checkout -b new_branch

# 导入文件
git pull new_branch.bundle new_branch:new_branch

# push
git push origin new_branch

4. 远程仓库中的修改同步到电脑 C

比如网页版或其他地方对远程仓库进行了更新,电脑 C 中的代码不是最新的,需要更新。

  • (1) 在有网络的电脑 P 上更新到最新版
    git pull origin master
    
  • (2) 电脑 P 打包最近的更新
    git bundle create updates.bundle HEAD master
    
    这个命令会创建一个名为 updates.bundle 的文件,包含从 master 分支到当前 HEAD 的所有提交。如果你只想包含从电脑 P 上最后一个已知状态到当前状态的更新,你需要指定一个更精确的范围。
  • (3) 电脑 C 拷贝 bundle 文件并更新
    git bundle verify updates.bundle
    git fetch updates.bundle main:temp_branch
    # git merge temp_branch
    git rebase temp_branch  # 如果你想保持工作目录不变
    git branch -d temp_branch
    
    • 不同操作系统使用不同的换行符,Windows 使用 \r\n,而 Linux 和 macOS 使用 \n。如果你在电脑 C 上(假设为 Windows)提交了文件,然后将其解压到电脑 P 上(假设为 Linux 或 macOS),Git 可能会因为换行符的差异而认为文件被修改了。解决这个问题,你可以设置 Git 在提交和检出时自动转换换行符:
      git config --global core.autocrlf input
      

5. 其他问题

(1) VScode 不显示 .git 文件夹

  • Settings --> 搜索 files --> 将 exlude 中的 git 删掉
  • 参考

(2) 指令终端不显示 .git 文件夹

  • 进入到存储库所在的目录,然后执行 attrib -H .git,这个命令将取消.git文件夹的隐藏属性,使其重新显示在文件资源管理器中。
  • 参考

2024.03.14
RdHotRiver

posted @ 2024-03-14 18:59  RdHotRiver  阅读(76)  评论(0)    收藏  举报