为什么git会留下修改过的文件?如何调整我的工作流程以做得更好?

Gha*_*aly 6 git version-control workflow patch git-patch

这将是一个很长的,但我希望你能忍受我.

我正在尝试使用git将我的团队的源代码置于版本控制之下.在尝试找到适合我的不同方法后,我终于决定使用git format-patch功能.FWIW,该产品是在Windows中运行的ASP.NET Web应用程序,我目前正在使用msysgit.

背景:
我有一个临时服务器(镜像生产服务器),它包含所有的aspx文件.然后我在我的根文件夹中使用init-db创建了一个git repo 并执行git add .了跟踪所有文件的操作.

为了让我在我的笔记本电脑上有本地副本,我实际上从登台服务器压缩了".git"文件夹并将其FTP到我的本地机器上.将其重命名为"staging.git"并做了一个git clone staging.git webappfolder针对我的开发.

在对feature1和feature2进行2次提交后,是时候将更改应用回登台服务器了.我做了一个git format-patch -2输出到文件0001blah.patch0002blah.patch.

然后将这两个补丁文件发送到登台服务器,我git am 0001blah.patch在登台服务器上做了一个.做一个git log显示提交的经历.但是,当我这样做时git status,它表明了Changed but not updated: modified: file1.aspx.

这究竟是什么意思?我也尝试过,git apply 0001blah.patch但我得到的只是一个error" patch failed: file1.aspx: patch does not apply.

我的工作流程有问题吗?任何关于正确方法或帮助的见解都会非常有帮助.同样,修补模型对我们来说是最可行的,因为我们不会很快建立SSH服务器.

mil*_*ose 5

我刚试过这个:

rm -rf clone?

# clone 1 is the working copy
mkdir clone1
(
    cd clone1
    git init
    echo foo >> file1
    git add file1
    git commit -m "Initial state"
)

# clone 2 is the staging repo
git clone clone1 clone2

# create patches
(
    cd clone1
    git tag staging # tag to track what's in staging

    echo feature1 >> file1
    git add file1
    git commit -m "Feature 1"

    echo feature2 >> file1
    git add file1
    git commit -m "Feature 2"

    rm *.patch
    git format-patch staging
)

# apply patches
(
    cd clone2
    git am ../clone1/*.patch
    # Cygwin/msysgit line ending weirdness when patching. Aborting and
    # reapplying clears it up.
    git am --abort 
    git am ../clone1/*.patch
    git log
    git status
)
Run Code Online (Sandbox Code Playgroud)

如果没有两次进行修补,那么补丁的次要问题是没有明确应用,但我最终在克隆2中使用了正确的file1内容的干净工作目录.因此,您的工作流程本身似乎没有任何问题.

Git apply只会更新工作树,而不会执行提交.

也就是说,我不会使用git存储库进行暂存.我的工作流程可能会创建开发存储库的发布分支(或者不是),只需部署完整的副本.

对于登台环境的增量更新,只需git tag staging在发布分支中使用"git diff staging..HEAD> update.patch"发送电子邮件,并应用标准unix"patch -p1"来应用它.除非您确实需要在登台服务器上物理更改历史记录.