[MEMO]git checkin/out process

常规 Git check in/out 代码流程,仅供参考和个人MEMO

默认check in的是 master branch

1. clone repo from remote to local 

Say remote repo is test:

1) git clone url_to_remote_repo/test.git  test 


2. create repo from client side

git init  then git add . .. or  use git clone xxx/new_repo.git new_repo 


3. create local workspace branch and switch to it.

git branch mylocal ; git checkout mylocal


4. Git add

add/modify/delete in local workspace branch,针对不同的修改可以采用不同的git add 参数

git add -A : 可以把所有的变化都track

git add -u : only for deleted and updated, can't include new added

git add .: only new added and updated, without delete.

如果需要放弃对某个文件的修改: git reset HEAD filename


5. git commit

-m "your messgae"  或者 -F commit_content_file 

生成changeset, 可以使用 git log -1 查看 commit message


5.5 git commit 追究修改

git commit --amend 

Note: 此处该命令会导致 changeset 重新生成一次。 

还不知道如何保持changeid 不变(在--amend 里面 最好一行天津 Change-Id: old_ID 该方法对我似乎不起作用)

有知道的可以告知一声咯~


6.根据需要在此时生成review request,review 通过后继续


7.git checkout master  then 更新本地master branch

git pull ; git reset --hard origin;


8.git checkout mylocal, 检查冲突

git  rebase master


9. fix conflicts , 然后git rebase --continue

此步骤循环直至没有冲突


10. git checkout master; git merge mylocal

将local workspace的内容merge到本地master 中


11.为了谨慎起见,使用 git diff 对比 origin master 和本地master 

首先 git log origin/master..master 查看是否只有一个 commit 输出

然后  git diff origin/master..master 查看 diff内容


12 最终check in

git push origin master.  最好是指出远端对应的branch(此次是master)

check in的时候 可能会遇到conflicts 可能是在pull 之后的时间发生了新的check in,此时需要reset master,从7 步骤开始重走一遍。





<think>我们面对的需求是:用Python脚本完成以下任务:1.复制文件到指定目录(/opt/sfyz_2/2025-06/memo-batch)2.替换文件内容:将原文件中的字符串'辽宁-2025-招生计划'替换为'青海-2025-(招生计划)'3.在后台运行这个文件(无前台显示)步骤分解:1.复制文件:我们可以使用shutil库的copy函数。注意,目标目录必须存在,否则会出错。如果目录不存在,我们需要先创建目录。2.替换文件内容:我们可以读取文件内容,然后进行字符串替换,再写回文件。注意,我们可以在复制后对新文件进行替换操作。3.后台运行文件:这取决于这个文件是什么类型的文件。如果是Python脚本,我们可以用subprocess.Popen在后台运行(不显示终端输出)。如果是其他可执行文件,同样可以用subprocess.Popen。但是,这里没有说明文件类型。我们假设这个文件是一个Python脚本(因为问题中要求用Python执行命令)。如果它是其他类型的文件(如shell脚本),同样可以用类似方式运行。具体步骤:-首先,确定源文件的路径(用户没有给出源文件路径,我们假设源文件在当前目录下,且文件名为memo-batch,或者我们需要从用户那里获取源文件路径?)由于问题中没有给出源文件路径,我们只能假设用户已经提供了源文件路径,或者我们让用户输入。但为了脚本的通用性,我们可以将源文件路径作为变量。但是,问题要求我们用Python写一个脚本来完成这些任务,所以我们需要在脚本中指定源文件路径。然而,用户并没有提供源文件路径,因此我们需要让用户修改脚本中的源文件路径。因此,我们设计一个Python脚本,其中:source_file="源文件路径"#用户需要修改这里target_directory="/opt/sfyz_2/2025-06"target_file=os.path.join(target_directory,"memo-batch")步骤:1.导入必要的模块:shutil,os,subprocess2.检查目标目录是否存在,不存在则创建。3.复制文件到目标目录。4.读取目标文件内容,进行字符串替换,然后写回目标文件。5.在后台运行目标文件(使用subprocess.Popen,并设置stdout和stderr为管道或文件,以免输出到前台)注意:后台运行意味着我们不会等待它完成(非阻塞),并且没有终端输出(我们将输出重定向到文件或忽略)。如果目标文件是Python脚本,我们可以这样运行:subprocess.Popen(['python',target_file],stdout=subprocess.PIPE,stderr=subprocess.PIPE)但如果是其他可执行文件,则需要根据实际情况调整命令。由于我们不知道文件类型,这里假设它是可执行的(可能具有shebang,如#!/usr/bin/envpython),我们可以直接执行它(需要确保它有可执行权限):subprocess.Popen([target_file],stdout=subprocess.PIPE,stderr=subprocess.PIPE)但是,为了安全起见,我们也可以根据文件扩展名来判断,或者由用户指定运行方式。由于问题中没有明确,我们按照它是Python脚本来处理(因为用户要求用Python执行命令)。同时,我们也可以考虑让用户指定运行命令。因此,我们编写一个Python脚本,用户需要修改源文件路径(如果源文件不在当前目录,需要写绝对路径)。另外,替换字符串时,注意使用字符串的replace方法。考虑到文件可能较大,我们逐行读取并替换,但也可以一次性读取(如果文件不大)。以下为代码实现:</think>以下是用Python实现文件复制、内容替换和后台运行的完整解决方案: ### 解决方案代码 ```python import shutil import os import subprocess # 1. 定义路径和替换内容 source_file = "memo-batch" # 替换为实际源文件路径 target_dir = "/opt/sfyz_2/2025-06" old_text = "辽宁-2025-招生计划" new_text = "青海-2025-(招生计划)" # 2. 创建目标目录(如果不存在) os.makedirs(target_dir, exist_ok=True) # 3. 复制文件 target_file = os.path.join(target_dir, "memo-batch") shutil.copy2(source_file, target_file) print(f"✅ 文件已复制到: {target_file}") # 4. 替换文件内容 with open(target_file, 'r+', encoding='utf-8') as f: content = f.read() updated_content = content.replace(old_text, new_text) f.seek(0) f.write(updated_content) f.truncate() print(f"✅ 内容替换完成: [{old_text}] → [{new_text}]") # 5. 后台运行文件 cmd = f"nohup python {target_file} > /dev/null 2>&1 &" subprocess.run(cmd, shell=True, check=True) print("🚀 文件已在后台运行 (无前台显示)") print(f"💡 提示: 使用 `ps aux | grep memo-batch` 查看进程状态") ``` ### 关键步骤说明 1. **文件复制** - 使用 `shutil.copy2()` 保留文件元数据 - `os.makedirs(..., exist_ok=True)` 自动创建目录 2. **内容替换** - 完整读取文件 → 执行字符串替换 → 重写文件 - `truncate()` 确保文件尺寸正确 3. **后台运行** - 使用 `nohup ... > /dev/null 2>&1 &` 组合命令: - `nohup`:忽略挂断信号 - `> /dev/null`:丢弃标准输出 - `2>&1`:重定向错误输出 - `&`:放入后台执行 ### 使用前注意事项 1. **权限检查** ```bash sudo chmod 777 /opt/sfyz_2 # 确保有写入权限 ``` 2. **依赖安装** ```bash pip install pathlib2 # 若使用旧版Python ``` ### 错误处理建议 - **文件不存在错误**:检查 `source_file` 路径是否正确 - **权限错误**:使用 `sudo` 运行脚本或调整目录权限 - **编码错误**:尝试不同编码如 `encoding='gbk'` ### 验证方法 ```bash # 检查文件内容 cat /opt/sfyz_2/2025-06/memo-batch | grep "青海-2025" # 检查后台进程 ps aux | grep "memo-batch" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值