8

使用 git,我希望能够将某个文件夹保留为我的本地项目的一部分(在分支中使用它等),但我不希望这个目录被推送到公共 git 服务器。

有问题的文件夹有一些项目不需要的 CLI Java 东西,但我想与将要上线的分支工作保持同步。

这可能吗?

4

4 回答 4

2

一个非常简短的答案是否定的。原因如下:当你的本地 git 分支被推送到服务器时,它会按原样推送,没有任何例外。由于提交包含文件,如果某些文件不会被推送,它会在内部弄乱 git。不支持这种选择性行为,我想它永远不会支持,因为大多数情况下,当您需要这些东西时,您会错误地使用 git。

但是,有很多方法:

  1. 第一个只是简单地将这些东西添加到 repo 中。您显然需要它并且希望它受版本控制,所以从我的角度来看,这就是将文件添加到 git 所需的全部内容。
  2. 您可以尝试 git-submodules,但这也会将文件添加到您的存储库中。您的 java cli 将是另一个存储库,您的原始存储库将跟踪版本。
  3. 你可以告诉 git 忽略子文件夹,而不是在那里创建你的 java-cli 存储库,并且只创建两个而不进行任何交互。

我肯定会选择 1 因为当我需要项目的东西时,它属于 repo,即使它是 java cli。

于 2012-06-15T21:32:00.280 回答
2

如果您根本不需要跟踪这些文件...

...你可以让 git忽略它们。

如果您想在本地跟踪它们...

...但在远程仓库中没有它们我只能给你一些我从未尝试过的东西的提示/想法,但你最终可能会拥有不同的存储库,事情可能会变得有点讨厌

我会看看(从可能还可以到可能相当混乱和一个坏主意):

  • 嵌套存储库
  • 推送时删除:(缺点:您可能无法正确区分,因为历史仅与临时存储库匹配。您当然也可以以某种方式破解您的差异,使设置更加混乱。)
    • 脚步:
      • 在将存储库克隆到临时文件夹之前
      • 从新创建的克隆中的整个历史记录中删除您的子文件夹(获取另一个具有不同提交哈希的存储库)
      • 推送新创建的仓库
    • 选项: 触发器:
      • pre-push
      • 手动执行上述操作,而不是使用git push
    • 选项: 移除:

再说一遍:我没有使用它们中的任何一个,也不知道它们的缺点、陷阱等,但对我来说,子树似乎是迄今为止最好的解决方案。

其余的大部分在我看来确实很混乱,但归根结底,唯一重要的是什么对你有用

运送糟糕的东西,但是运送。

...无论是芥末

于 2017-11-14T15:06:45.137 回答
0

晚会迟到了,但问题仍然很好。您正在尝试仅使用所需工具的一半来解决部署问题:为了实现您的目标,您必须在部署链中同时使用 git 和依赖项管理器。

使用 git,您可以对所有代码以及 CLI Java 内容进行版本跟踪,但使用 DM,您的 CLI Java 内容将被标记为“开发”包。

在生产中部署您应该排除所有“开发”包。

在 Java 中我认为正确的工具应该是 Maven,在 PHP 中有 Composer,在 Javascript 中最著名的是 NPM。

我的两(晚)美分

于 2021-05-26T07:16:54.513 回答
-1

一个更简短的答案是肯定的!
它现在是 github 中的一个功能。您可以使用 gitignore 排除文件类型。
https://help.github.com/articles/ignoring-files/
我个人通过将以下内容添加到我的全局 gitignore 文件中,将名为 ASSETS 的文件目录从我的所有存储库中排除:
ASSETS/*
示例:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Audio Files #
###############
*.wav
*.mp3
*.wma

# Video Files #
###############
*.wmv
*.mpg
*.mpeg
*.mp4
*.mov
*.flv
*.avi
*.ogv
*.ogg
*.webm

# Image Files #
###############
*.jpg
*.gif
*.png
*.svg
*.ico

# Folders #
###########
ASSETS/*

# Documents #
#############
*.pdf
*.doc


我的 arch linux 机器上的上述文件位于 ~/.gitignore_global

于 2015-05-02T21:33:27.563 回答