簡體   English   中英

Git push 不會刪除已刪除的文件

[英]Git push does not remove deleted files

我不是 GIT 專家,如果這是一個錯誤的論壇,請原諒我,但我正在使用 GIT 將代碼部署到我的生產服務器,這工作正常,我只是執行git push production master ,其中production指向我的 WPEngine 服務器和它顯然是 master 分支的副本。

這種方法的問題在於,我們需要在 repo 中包含 prod 工作所需的一切。 這包括dist/ (生成的 CSS/JS 等)以及vendor/ (作曲家安裝的第三方庫)之類的東西,這顯然不理想。

為了解決這個問題,我有一個(在我看來)單獨的.gitignore的簡單想法。 一為origin ,一為production 我設置的方式是我有我的正常.gitignore然后我還有一個.prodignore

然后我編寫了一個簡單的 shell 腳本 ( deploy.sh ),它執行以下操作:

  1. 瀏覽每個.prodignore文件並將其重命名為.gitignore

     for prodignore in $(find . -name '.prodignore'); do gitignore=$(echo $prodignore | sed 's/prodignore/gitignore/') mv $prodignore $gitignore done
  2. 從 GIT 中刪除所有文件,但將它們保留在磁盤上: git rm -r --cached --quiet . (這負責刪除現在在新.gitignore ——比如src/

  3. 現在使用新的.gitignore重新添加所有文件: git add --all (這負責添加以前在.gitignore文件 - 如dist/

  4. 提交並推送到production遠程: git commit --quiet -m 'Sleek Deploy' && git push --quiet --force production master

  5. 最后返回一次提交,以便我們撤消剛才所做的一切: git reset HEAD~ && git reset --hard HEAD

這一切也都很好。 正確的新文件被推送到production ,我的本地存儲庫和origin看起來仍然不錯,據我所知沒有奇怪的歷史記錄。

什么工作,但是-這是我最近才發現-是,如果我刪除我的本地機器的文件時,推到刪除origin ,然后部署到production使用上述步驟刪除的文件不會被刪除。

為什么是這樣? 我能做些什么來確保它被刪除嗎? 我對此的整個方法有缺陷嗎? Imo 為單獨的遙控器提供單獨的.gitignore文件是解決這個問題的一個簡單的解決方案,但也許我已經咬掉了我無法咀嚼的東西。

值得注意的是,如果我不--force push 在第 4 步,遙控器會告訴我我們不同步(這是有道理的,因為它有一個實際上並不存在於其他任何地方的提交 - 對吧?)

編輯:更多信息:

  • 當我像往常一樣執行git push production master並且productionmaster的副本時,我從來沒有遇到過這個問題

  • 這與.gitignore無關。 我正在談論的文件從未出現在.gitignore.prodignore 我提到它們只是為了提供背景信息以及為什么我需要將從未推送到源的提交提交到生產中。 這只會發生在我:

    1. 創建任何隨機文件,比如“test.txt”
    2. 將文件推送到origin
    3. 使用上述步驟將文件推送到production
    4. 刪除文件
    5. 將刪除推送到origin (文件不再在 repo 中)
    6. 使用上述步驟將刪除推送到production (由於某種原因,該文件仍在production服務器上)

如果我從不將文件推送到production開始,只是將其推送到origin然后將其刪除,那么它永遠不會在production結束。

據我所知,如果有幫助, production是一個裸回購。

如果刪除的文件在新的.gitignore ,它肯定不會被刪除,因為您的提交根本不會查看該文件。

如果它是,並且您仍然希望將其刪除,則必須使用原始.gitignore文件推送到生產環境,然后繼續“Sleek Deploy”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM